@angular/compiler-cli 12.2.3 → 12.2.7

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.
Files changed (27) hide show
  1. package/linker/src/file_linker/partial_linkers/partial_linker_selector.js +2 -2
  2. package/ngcc/src/host/delegating_host.d.ts +1 -1
  3. package/ngcc/src/host/delegating_host.js +3 -3
  4. package/ngcc/src/packages/build_marker.d.ts +1 -1
  5. package/ngcc/src/packages/build_marker.js +1 -1
  6. package/package.json +2 -2
  7. package/src/ngtsc/core/src/compiler.js +7 -3
  8. package/src/ngtsc/diagnostics/src/error_code.d.ts +9 -0
  9. package/src/ngtsc/diagnostics/src/error_code.js +10 -1
  10. package/src/ngtsc/reflection/src/host.d.ts +6 -6
  11. package/src/ngtsc/reflection/src/host.js +1 -1
  12. package/src/ngtsc/reflection/src/typescript.d.ts +3 -3
  13. package/src/ngtsc/reflection/src/typescript.js +15 -16
  14. package/src/ngtsc/typecheck/extended/api/api.d.ts +18 -4
  15. package/src/ngtsc/typecheck/extended/api/api.js +106 -2
  16. package/src/ngtsc/typecheck/extended/checks/invalid_banana_in_box/index.d.ts +22 -0
  17. package/src/ngtsc/typecheck/extended/checks/invalid_banana_in_box/index.js +52 -0
  18. package/src/ngtsc/typecheck/extended/checks/nullish_coalescing_not_nullable/index.d.ts +23 -0
  19. package/src/ngtsc/typecheck/extended/checks/nullish_coalescing_not_nullable/index.js +64 -0
  20. package/src/ngtsc/typecheck/extended/src/extended_template_checker.d.ts +1 -2
  21. package/src/ngtsc/typecheck/extended/src/extended_template_checker.js +4 -74
  22. package/src/ngtsc/typecheck/src/type_parameter_emitter.d.ts +1 -1
  23. package/src/ngtsc/typecheck/src/type_parameter_emitter.js +11 -7
  24. package/src/transformers/downlevel_decorators_transform.js +85 -91
  25. package/src/version.js +1 -1
  26. package/src/ngtsc/typecheck/extended/src/template_checks/invalid_banana_in_box/index.d.ts +0 -21
  27. package/src/ngtsc/typecheck/extended/src/template_checks/invalid_banana_in_box/index.js +0 -83
@@ -165,6 +165,15 @@
165
165
  * ```
166
166
  */
167
167
  ErrorCode[ErrorCode["INVALID_BANANA_IN_BOX"] = 8101] = "INVALID_BANANA_IN_BOX";
168
+ /**
169
+ * The left side of a nullish coalescing operation is not nullable.
170
+ *
171
+ * ```
172
+ * {{ foo ?? bar }}
173
+ * ```
174
+ * When the type of foo doesn't include `null` or `undefined`.
175
+ */
176
+ ErrorCode[ErrorCode["NULLISH_COALESCING_NOT_NULLABLE"] = 8102] = "NULLISH_COALESCING_NOT_NULLABLE";
168
177
  /**
169
178
  * The template type-checking engine would need to generate an inline type check block for a
170
179
  * component, but the current type-checking environment doesn't support it.
@@ -223,4 +232,4 @@
223
232
  }
224
233
  exports.ngErrorCode = ngErrorCode;
225
234
  });
226
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JfY29kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2MvZGlhZ25vc3RpY3Mvc3JjL2Vycm9yX2NvZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOzs7Ozs7Ozs7Ozs7O0lBRUg7O09BRUc7SUFDSCxJQUFZLFNBOE1YO0lBOU1ELFdBQVksU0FBUztRQUNuQixzRkFBZ0MsQ0FBQTtRQUNoQyw4RUFBNEIsQ0FBQTtRQUM1Qiw0RUFBMkIsQ0FBQTtRQUMzQiw0RkFBbUMsQ0FBQTtRQUNuQyw0RUFBMkIsQ0FBQTtRQUUzQjs7V0FFRztRQUNILDBFQUEwQixDQUFBO1FBRTFCLDRFQUEyQixDQUFBO1FBQzNCLHNFQUF3QixDQUFBO1FBRXhCLHdGQUFpQyxDQUFBO1FBQ2pDLHNFQUF3QixDQUFBO1FBQ3hCLDBFQUEwQixDQUFBO1FBQzFCLHdGQUFpQyxDQUFBO1FBRWpDLDhGQUE4RjtRQUM5Riw0RUFBMkIsQ0FBQTtRQUUzQjs7O1dBR0c7UUFDSCwwR0FBMEMsQ0FBQTtRQUUxQzs7O1dBR0c7UUFDSCxvSEFBK0MsQ0FBQTtRQUUvQzs7O1dBR0c7UUFDSCw0RkFBbUMsQ0FBQTtRQUVuQzs7O1dBR0c7UUFDSCw4R0FBNEMsQ0FBQTtRQUU1QywwRUFBMEIsQ0FBQTtRQUMxQiw0R0FBMkMsQ0FBQTtRQUMzQzs7O1dBR0c7UUFDSCw4RUFBNEIsQ0FBQTtRQUU1QiwwRkFBa0MsQ0FBQTtRQUNsQyxrSkFBOEQsQ0FBQTtRQUU5RDs7O1dBR0c7UUFDSCxvRkFBK0IsQ0FBQTtRQUUvQjs7V0FFRztRQUNILDRFQUEyQixDQUFBO1FBRTNCOztXQUVHO1FBQ0gsNEZBQW1DLENBQUE7UUFFbkM7O1dBRUc7UUFDSCxrRkFBOEIsQ0FBQTtRQUU5Qjs7V0FFRztRQUNILGtGQUE4QixDQUFBO1FBRTlCOzs7V0FHRztRQUNILHNGQUFnQyxDQUFBO1FBRWhDOzs7V0FHRztRQUNILGdJQUFxRCxDQUFBO1FBRXJEOzs7V0FHRztRQUNILG9HQUF1QyxDQUFBO1FBRXZDOztXQUVHO1FBQ0gsa0dBQXNDLENBQUE7UUFFdEM7OztXQUdHO1FBQ0gsc0dBQXdDLENBQUE7UUFFeEM7O1dBRUc7UUFDSCxnRkFBNkIsQ0FBQTtRQUU3Qjs7V0FFRztRQUNILG9GQUErQixDQUFBO1FBRS9COztXQUVHO1FBQ0gsb0ZBQStCLENBQUE7UUFFL0I7O1dBRUc7UUFDSCw0REFBbUIsQ0FBQTtRQUVuQjs7Ozs7Ozs7Ozs7V0FXRztRQUNILDBGQUFrQyxDQUFBO1FBRWxDOzs7Ozs7O1dBT0c7UUFDSCxnR0FBcUMsQ0FBQTtRQUVyQzs7O1dBR0c7UUFDSCw4RUFBNEIsQ0FBQTtRQUU1Qjs7Ozs7OztXQU9HO1FBQ0gsOEVBQTRCLENBQUE7UUFFNUI7OztXQUdHO1FBQ0gsMEVBQTBCLENBQUE7UUFFMUI7OztXQUdHO1FBQ0gsc0ZBQWdDLENBQUE7UUFFaEM7O1dBRUc7UUFDSCxzRkFBZ0MsQ0FBQTtRQUVoQyw0RUFBNEU7UUFDNUUsaUdBQWlHO1FBQ2pHLHNGQUFzRjtRQUV0Rjs7O1dBR0c7UUFDSCxxRkFBZ0MsQ0FBQTtRQUVoQzs7OztXQUlHO1FBQ0gsdUdBQXlDLENBQUE7SUFDM0MsQ0FBQyxFQTlNVyxTQUFTLEdBQVQsaUJBQVMsS0FBVCxpQkFBUyxRQThNcEI7SUFFRDs7Ozs7T0FLRztJQUNVLFFBQUEsMkJBQTJCLEdBQUcsMkJBQTJCLENBQUM7SUFFdkU7Ozs7T0FJRztJQUNVLFFBQUEsMkJBQTJCLEdBQUcsSUFBSSxHQUFHLENBQUM7UUFDakQsU0FBUyxDQUFDLHlCQUF5QjtRQUNuQyxTQUFTLENBQUMscUJBQXFCO1FBQy9CLFNBQVMsQ0FBQyxtQkFBbUI7UUFDN0IsU0FBUyxDQUFDLHNCQUFzQjtRQUNoQyxTQUFTLENBQUMsd0JBQXdCO1FBQ2xDLFNBQVMsQ0FBQyx3QkFBd0I7UUFDbEMsU0FBUyxDQUFDLHFDQUFxQztLQUNoRCxDQUFDLENBQUM7SUFFSDs7T0FFRztJQUNILFNBQWdCLFdBQVcsQ0FBQyxJQUFlO1FBQ3pDLE9BQU8sUUFBUSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRkQsa0NBRUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuLyoqXG4gKiBAcHVibGljQXBpXG4gKi9cbmV4cG9ydCBlbnVtIEVycm9yQ29kZSB7XG4gIERFQ09SQVRPUl9BUkdfTk9UX0xJVEVSQUwgPSAxMDAxLFxuICBERUNPUkFUT1JfQVJJVFlfV1JPTkcgPSAxMDAyLFxuICBERUNPUkFUT1JfTk9UX0NBTExFRCA9IDEwMDMsXG4gIERFQ09SQVRPUl9PTl9BTk9OWU1PVVNfQ0xBU1MgPSAxMDA0LFxuICBERUNPUkFUT1JfVU5FWFBFQ1RFRCA9IDEwMDUsXG5cbiAgLyoqXG4gICAqIFRoaXMgZXJyb3IgY29kZSBpbmRpY2F0ZXMgdGhhdCB0aGVyZSBhcmUgaW5jb21wYXRpYmxlIGRlY29yYXRvcnMgb24gYSB0eXBlIG9yIGEgY2xhc3MgZmllbGQuXG4gICAqL1xuICBERUNPUkFUT1JfQ09MTElTSU9OID0gMTAwNixcblxuICBWQUxVRV9IQVNfV1JPTkdfVFlQRSA9IDEwMTAsXG4gIFZBTFVFX05PVF9MSVRFUkFMID0gMTAxMSxcblxuICBDT01QT05FTlRfTUlTU0lOR19URU1QTEFURSA9IDIwMDEsXG4gIFBJUEVfTUlTU0lOR19OQU1FID0gMjAwMixcbiAgUEFSQU1fTUlTU0lOR19UT0tFTiA9IDIwMDMsXG4gIERJUkVDVElWRV9NSVNTSU5HX1NFTEVDVE9SID0gMjAwNCxcblxuICAvKiogUmFpc2VkIHdoZW4gYW4gdW5kZWNvcmF0ZWQgY2xhc3MgaXMgcGFzc2VkIGluIGFzIGEgcHJvdmlkZXIgdG8gYSBtb2R1bGUgb3IgYSBkaXJlY3RpdmUuICovXG4gIFVOREVDT1JBVEVEX1BST1ZJREVSID0gMjAwNSxcblxuICAvKipcbiAgICogUmFpc2VkIHdoZW4gYSBEaXJlY3RpdmUgaW5oZXJpdHMgaXRzIGNvbnN0cnVjdG9yIGZyb20gYSBiYXNlIGNsYXNzIHdpdGhvdXQgYW4gQW5ndWxhclxuICAgKiBkZWNvcmF0b3IuXG4gICAqL1xuICBESVJFQ1RJVkVfSU5IRVJJVFNfVU5ERUNPUkFURURfQ1RPUiA9IDIwMDYsXG5cbiAgLyoqXG4gICAqIFJhaXNlZCB3aGVuIGFuIHVuZGVjb3JhdGVkIGNsYXNzIHRoYXQgaXMgdXNpbmcgQW5ndWxhciBmZWF0dXJlc1xuICAgKiBoYXMgYmVlbiBkaXNjb3ZlcmVkLlxuICAgKi9cbiAgVU5ERUNPUkFURURfQ0xBU1NfVVNJTkdfQU5HVUxBUl9GRUFUVVJFUyA9IDIwMDcsXG5cbiAgLyoqXG4gICAqIFJhaXNlZCB3aGVuIGFuIGNvbXBvbmVudCBjYW5ub3QgcmVzb2x2ZSBhbiBleHRlcm5hbCByZXNvdXJjZSwgc3VjaCBhcyBhIHRlbXBsYXRlIG9yIGEgc3R5bGVcbiAgICogc2hlZXQuXG4gICAqL1xuICBDT01QT05FTlRfUkVTT1VSQ0VfTk9UX0ZPVU5EID0gMjAwOCxcblxuICAvKipcbiAgICogUmFpc2VkIHdoZW4gYSBjb21wb25lbnQgdXNlcyBgU2hhZG93RG9tYCB2aWV3IGVuY2Fwc3VsYXRpb24sIGJ1dCBpdHMgc2VsZWN0b3JcbiAgICogZG9lcyBub3QgbWF0Y2ggdGhlIHNoYWRvdyBET00gdGFnIG5hbWUgcmVxdWlyZW1lbnRzLlxuICAgKi9cbiAgQ09NUE9ORU5UX0lOVkFMSURfU0hBRE9XX0RPTV9TRUxFQ1RPUiA9IDIwMDksXG5cbiAgU1lNQk9MX05PVF9FWFBPUlRFRCA9IDMwMDEsXG4gIFNZTUJPTF9FWFBPUlRFRF9VTkRFUl9ESUZGRVJFTlRfTkFNRSA9IDMwMDIsXG4gIC8qKlxuICAgKiBSYWlzZWQgd2hlbiBhIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGRpcmVjdGl2ZXMgYW5kL29yIHBpcGVzIHdvdWxkIGNhdXNlIGEgY3ljbGljIGltcG9ydCB0byBiZVxuICAgKiBjcmVhdGVkIHRoYXQgY2Fubm90IGJlIGhhbmRsZWQsIHN1Y2ggYXMgaW4gcGFydGlhbCBjb21waWxhdGlvbiBtb2RlLlxuICAgKi9cbiAgSU1QT1JUX0NZQ0xFX0RFVEVDVEVEID0gMzAwMyxcblxuICBDT05GSUdfRkxBVF9NT0RVTEVfTk9fSU5ERVggPSA0MDAxLFxuICBDT05GSUdfU1RSSUNUX1RFTVBMQVRFU19JTVBMSUVTX0ZVTExfVEVNUExBVEVfVFlQRUNIRUNLID0gNDAwMixcblxuICAvKipcbiAgICogUmFpc2VkIHdoZW4gYSBob3N0IGV4cHJlc3Npb24gaGFzIGEgcGFyc2UgZXJyb3IsIHN1Y2ggYXMgYSBob3N0IGxpc3RlbmVyIG9yIGhvc3QgYmluZGluZ1xuICAgKiBleHByZXNzaW9uIGNvbnRhaW5pbmcgYSBwaXBlLlxuICAgKi9cbiAgSE9TVF9CSU5ESU5HX1BBUlNFX0VSUk9SID0gNTAwMSxcblxuICAvKipcbiAgICogUmFpc2VkIHdoZW4gdGhlIGNvbXBpbGVyIGNhbm5vdCBwYXJzZSBhIGNvbXBvbmVudCdzIHRlbXBsYXRlLlxuICAgKi9cbiAgVEVNUExBVEVfUEFSU0VfRVJST1IgPSA1MDAyLFxuXG4gIC8qKlxuICAgKiBSYWlzZWQgd2hlbiBhbiBOZ01vZHVsZSBjb250YWlucyBhbiBpbnZhbGlkIHJlZmVyZW5jZSBpbiBgZGVjbGFyYXRpb25zYC5cbiAgICovXG4gIE5HTU9EVUxFX0lOVkFMSURfREVDTEFSQVRJT04gPSA2MDAxLFxuXG4gIC8qKlxuICAgKiBSYWlzZWQgd2hlbiBhbiBOZ01vZHVsZSBjb250YWlucyBhbiBpbnZhbGlkIHR5cGUgaW4gYGltcG9ydHNgLlxuICAgKi9cbiAgTkdNT0RVTEVfSU5WQUxJRF9JTVBPUlQgPSA2MDAyLFxuXG4gIC8qKlxuICAgKiBSYWlzZWQgd2hlbiBhbiBOZ01vZHVsZSBjb250YWlucyBhbiBpbnZhbGlkIHR5cGUgaW4gYGV4cG9ydHNgLlxuICAgKi9cbiAgTkdNT0RVTEVfSU5WQUxJRF9FWFBPUlQgPSA2MDAzLFxuXG4gIC8qKlxuICAgKiBSYWlzZWQgd2hlbiBhbiBOZ01vZHVsZSBjb250YWlucyBhIHR5cGUgaW4gYGV4cG9ydHNgIHdoaWNoIGlzIG5laXRoZXIgaW4gYGRlY2xhcmF0aW9uc2Agbm9yXG4gICAqIG90aGVyd2lzZSBpbXBvcnRlZC5cbiAgICovXG4gIE5HTU9EVUxFX0lOVkFMSURfUkVFWFBPUlQgPSA2MDA0LFxuXG4gIC8qKlxuICAgKiBSYWlzZWQgd2hlbiBhIGBNb2R1bGVXaXRoUHJvdmlkZXJzYCB3aXRoIGEgbWlzc2luZ1xuICAgKiBnZW5lcmljIHR5cGUgYXJndW1lbnQgaXMgcGFzc2VkIGludG8gYW4gYE5nTW9kdWxlYC5cbiAgICovXG4gIE5HTU9EVUxFX01PRFVMRV9XSVRIX1BST1ZJREVSU19NSVNTSU5HX0dFTkVSSUMgPSA2MDA1LFxuXG4gIC8qKlxuICAgKiBSYWlzZWQgd2hlbiBhbiBOZ01vZHVsZSBleHBvcnRzIG11bHRpcGxlIGRpcmVjdGl2ZXMvcGlwZXMgb2YgdGhlIHNhbWUgbmFtZSBhbmQgdGhlIGNvbXBpbGVyXG4gICAqIGF0dGVtcHRzIHRvIGdlbmVyYXRlIHByaXZhdGUgcmUtZXhwb3J0cyB3aXRoaW4gdGhlIE5nTW9kdWxlIGZpbGUuXG4gICAqL1xuICBOR01PRFVMRV9SRUVYUE9SVF9OQU1FX0NPTExJU0lPTiA9IDYwMDYsXG5cbiAgLyoqXG4gICAqIFJhaXNlZCB3aGVuIGEgZGlyZWN0aXZlL3BpcGUgaXMgcGFydCBvZiB0aGUgZGVjbGFyYXRpb25zIG9mIHR3byBvciBtb3JlIE5nTW9kdWxlcy5cbiAgICovXG4gIE5HTU9EVUxFX0RFQ0xBUkFUSU9OX05PVF9VTklRVUUgPSA2MDA3LFxuXG4gIC8qKlxuICAgKiBOb3QgYWN0dWFsbHkgcmFpc2VkIGJ5IHRoZSBjb21waWxlciwgYnV0IHJlc2VydmVkIGZvciBkb2N1bWVudGF0aW9uIG9mIGEgVmlldyBFbmdpbmUgZXJyb3Igd2hlblxuICAgKiBhIFZpZXcgRW5naW5lIGJ1aWxkIGRlcGVuZHMgb24gYW4gSXZ5LWNvbXBpbGVkIE5nTW9kdWxlLlxuICAgKi9cbiAgTkdNT0RVTEVfVkVfREVQRU5ERU5DWV9PTl9JVllfTElCID0gNjk5OSxcblxuICAvKipcbiAgICogQW4gZWxlbWVudCBuYW1lIGZhaWxlZCB2YWxpZGF0aW9uIGFnYWluc3QgdGhlIERPTSBzY2hlbWEuXG4gICAqL1xuICBTQ0hFTUFfSU5WQUxJRF9FTEVNRU5UID0gODAwMSxcblxuICAvKipcbiAgICogQW4gZWxlbWVudCdzIGF0dHJpYnV0ZSBuYW1lIGZhaWxlZCB2YWxpZGF0aW9uIGFnYWluc3QgdGhlIERPTSBzY2hlbWEuXG4gICAqL1xuICBTQ0hFTUFfSU5WQUxJRF9BVFRSSUJVVEUgPSA4MDAyLFxuXG4gIC8qKlxuICAgKiBObyBtYXRjaGluZyBkaXJlY3RpdmUgd2FzIGZvdW5kIGZvciBhIGAjcmVmPVwidGFyZ2V0XCJgIGV4cHJlc3Npb24uXG4gICAqL1xuICBNSVNTSU5HX1JFRkVSRU5DRV9UQVJHRVQgPSA4MDAzLFxuXG4gIC8qKlxuICAgKiBObyBtYXRjaGluZyBwaXBlIHdhcyBmb3VuZCBmb3IgYVxuICAgKi9cbiAgTUlTU0lOR19QSVBFID0gODAwNCxcblxuICAvKipcbiAgICogVGhlIGxlZnQtaGFuZCBzaWRlIG9mIGFuIGFzc2lnbm1lbnQgZXhwcmVzc2lvbiB3YXMgYSB0ZW1wbGF0ZSB2YXJpYWJsZS4gRWZmZWN0aXZlbHksIHRoZVxuICAgKiB0ZW1wbGF0ZSBsb29rZWQgbGlrZTpcbiAgICpcbiAgICogYGBgXG4gICAqIDxuZy10ZW1wbGF0ZSBsZXQtc29tZXRoaW5nPlxuICAgKiAgIDxidXR0b24gKGNsaWNrKT1cInNvbWV0aGluZyA9IC4uLlwiPi4uLjwvYnV0dG9uPlxuICAgKiA8L25nLXRlbXBsYXRlPlxuICAgKiBgYGBcbiAgICpcbiAgICogVGVtcGxhdGUgdmFyaWFibGVzIGFyZSByZWFkLW9ubHkuXG4gICAqL1xuICBXUklURV9UT19SRUFEX09OTFlfVkFSSUFCTEUgPSA4MDA1LFxuXG4gIC8qKlxuICAgKiBBIHRlbXBsYXRlIHZhcmlhYmxlIHdhcyBkZWNsYXJlZCB0d2ljZS4gRm9yIGV4YW1wbGU6XG4gICAqXG4gICAqIGBgYGh0bWxcbiAgICogPGRpdiAqbmdGb3I9XCJsZXQgaSBvZiBpdGVtczsgbGV0IGkgPSBpbmRleFwiPlxuICAgKiA8L2Rpdj5cbiAgICogYGBgXG4gICAqL1xuICBEVVBMSUNBVEVfVkFSSUFCTEVfREVDTEFSQVRJT04gPSA4MDA2LFxuXG4gIC8qKlxuICAgKiBBIHRlbXBsYXRlIGhhcyBhIHR3byB3YXkgYmluZGluZyAodHdvIGJpbmRpbmdzIGNyZWF0ZWQgYnkgYSBzaW5nbGUgc3ludGFjdGlhbCBlbGVtZW50KVxuICAgKiBpbiB3aGljaCB0aGUgaW5wdXQgYW5kIG91dHB1dCBhcmUgZ29pbmcgdG8gZGlmZmVyZW50IHBsYWNlcy5cbiAgICovXG4gIFNQTElUX1RXT19XQVlfQklORElORyA9IDgwMDcsXG5cbiAgLyoqXG4gICAqIEEgdHdvIHdheSBiaW5kaW5nIGluIGEgdGVtcGxhdGUgaGFzIGFuIGluY29ycmVjdCBzeW50YXgsXG4gICAqIHBhcmVudGhlc2VzIG91dHNpZGUgYnJhY2tldHMuIEZvciBleGFtcGxlOlxuICAgKlxuICAgKiBgYGBcbiAgICogPGRpdiAoW2Zvb10pPVwiYmFyXCIgLz5cbiAgICogYGBgXG4gICAqL1xuICBJTlZBTElEX0JBTkFOQV9JTl9CT1ggPSA4MTAxLFxuXG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgdHlwZS1jaGVja2luZyBlbmdpbmUgd291bGQgbmVlZCB0byBnZW5lcmF0ZSBhbiBpbmxpbmUgdHlwZSBjaGVjayBibG9jayBmb3IgYVxuICAgKiBjb21wb25lbnQsIGJ1dCB0aGUgY3VycmVudCB0eXBlLWNoZWNraW5nIGVudmlyb25tZW50IGRvZXNuJ3Qgc3VwcG9ydCBpdC5cbiAgICovXG4gIElOTElORV9UQ0JfUkVRVUlSRUQgPSA4OTAwLFxuXG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgdHlwZS1jaGVja2luZyBlbmdpbmUgd291bGQgbmVlZCB0byBnZW5lcmF0ZSBhbiBpbmxpbmUgdHlwZSBjb25zdHJ1Y3RvciBmb3IgYVxuICAgKiBkaXJlY3RpdmUgb3IgY29tcG9uZW50LCBidXQgdGhlIGN1cnJlbnQgdHlwZS1jaGVja2luZyBlbnZpcm9ubWVudCBkb2Vzbid0IHN1cHBvcnQgaXQuXG4gICAqL1xuICBJTkxJTkVfVFlQRV9DVE9SX1JFUVVJUkVEID0gODkwMSxcblxuICAvKipcbiAgICogQW4gaW5qZWN0YWJsZSBhbHJlYWR5IGhhcyBhIGDJtXByb3ZgIHByb3BlcnR5LlxuICAgKi9cbiAgSU5KRUNUQUJMRV9EVVBMSUNBVEVfUFJPViA9IDkwMDEsXG5cbiAgLy8gMTBYWFggZXJyb3IgY29kZXMgYXJlIHJlc2VydmVkIGZvciBkaWFnbm9zdGljcyB3aXRoIGNhdGVnb3JpZXMgb3RoZXIgdGhhblxuICAvLyBgdHMuRGlhZ25vc3RpY0NhdGVnb3J5LkVycm9yYC4gVGhlc2UgZGlhZ25vc3RpY3MgYXJlIGdlbmVyYXRlZCBieSB0aGUgY29tcGlsZXIgd2hlbiBjb25maWd1cmVkXG4gIC8vIHRvIGRvIHNvIGJ5IGEgdG9vbCBzdWNoIGFzIHRoZSBMYW5ndWFnZSBTZXJ2aWNlLCBvciBieSB0aGUgTGFuZ3VhZ2UgU2VydmljZSBpdHNlbGYuXG5cbiAgLyoqXG4gICAqIFN1Z2dlc3QgdXNlcnMgdG8gZW5hYmxlIGBzdHJpY3RUZW1wbGF0ZXNgIHRvIG1ha2UgdXNlIG9mIGZ1bGwgY2FwYWJpbGl0aWVzXG4gICAqIHByb3ZpZGVkIGJ5IEFuZ3VsYXIgbGFuZ3VhZ2Ugc2VydmljZS5cbiAgICovXG4gIFNVR0dFU1RfU1RSSUNUX1RFTVBMQVRFUyA9IDEwMDAxLFxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhhdCBhIHBhcnRpY3VsYXIgc3RydWN0dXJhbCBkaXJlY3RpdmUgcHJvdmlkZXMgYWR2YW5jZWQgdHlwZSBuYXJyb3dpbmdcbiAgICogZnVuY3Rpb25hbGl0eSwgYnV0IHRoZSBjdXJyZW50IHRlbXBsYXRlIHR5cGUtY2hlY2tpbmcgY29uZmlndXJhdGlvbiBkb2VzIG5vdCBhbGxvdyBpdHMgdXNhZ2UgaW5cbiAgICogdHlwZSBpbmZlcmVuY2UuXG4gICAqL1xuICBTVUdHRVNUX1NVQk9QVElNQUxfVFlQRV9JTkZFUkVOQ0UgPSAxMDAwMixcbn1cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqIEJhc2UgVVJMIGZvciB0aGUgZXJyb3IgZGV0YWlscyBwYWdlLlxuICogS2VlcCB0aGlzIHZhbHVlIGluIHN5bmMgd2l0aCBhIHNpbWlsYXIgY29uc3QgaW5cbiAqIGBwYWNrYWdlcy9jb3JlL3NyYy9yZW5kZXIzL2Vycm9yX2NvZGUudHNgLlxuICovXG5leHBvcnQgY29uc3QgRVJST1JfREVUQUlMU19QQUdFX0JBU0VfVVJMID0gJ2h0dHBzOi8vYW5ndWxhci5pby9lcnJvcnMnO1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICogQ29udGFpbnMgYSBzZXQgb2YgZXJyb3IgbWVzc2FnZXMgdGhhdCBoYXZlIGRldGFpbGVkIGd1aWRlcyBhdCBhbmd1bGFyLmlvLlxuICogRnVsbCBsaXN0IG9mIGF2YWlsYWJsZSBlcnJvciBndWlkZXMgY2FuIGJlIGZvdW5kIGF0IGh0dHBzOi8vYW5ndWxhci5pby9lcnJvcnNcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBJTEVSX0VSUk9SU19XSVRIX0dVSURFUyA9IG5ldyBTZXQoW1xuICBFcnJvckNvZGUuREVDT1JBVE9SX0FSR19OT1RfTElURVJBTCxcbiAgRXJyb3JDb2RlLklNUE9SVF9DWUNMRV9ERVRFQ1RFRCxcbiAgRXJyb3JDb2RlLlBBUkFNX01JU1NJTkdfVE9LRU4sXG4gIEVycm9yQ29kZS5TQ0hFTUFfSU5WQUxJRF9FTEVNRU5ULFxuICBFcnJvckNvZGUuU0NIRU1BX0lOVkFMSURfQVRUUklCVVRFLFxuICBFcnJvckNvZGUuTUlTU0lOR19SRUZFUkVOQ0VfVEFSR0VULFxuICBFcnJvckNvZGUuQ09NUE9ORU5UX0lOVkFMSURfU0hBRE9XX0RPTV9TRUxFQ1RPUixcbl0pO1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgZnVuY3Rpb24gbmdFcnJvckNvZGUoY29kZTogRXJyb3JDb2RlKTogbnVtYmVyIHtcbiAgcmV0dXJuIHBhcnNlSW50KCctOTknICsgY29kZSk7XG59XG4iXX0=
235
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JfY29kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2MvZGlhZ25vc3RpY3Mvc3JjL2Vycm9yX2NvZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOzs7Ozs7Ozs7Ozs7O0lBRUg7O09BRUc7SUFDSCxJQUFZLFNBd05YO0lBeE5ELFdBQVksU0FBUztRQUNuQixzRkFBZ0MsQ0FBQTtRQUNoQyw4RUFBNEIsQ0FBQTtRQUM1Qiw0RUFBMkIsQ0FBQTtRQUMzQiw0RkFBbUMsQ0FBQTtRQUNuQyw0RUFBMkIsQ0FBQTtRQUUzQjs7V0FFRztRQUNILDBFQUEwQixDQUFBO1FBRTFCLDRFQUEyQixDQUFBO1FBQzNCLHNFQUF3QixDQUFBO1FBRXhCLHdGQUFpQyxDQUFBO1FBQ2pDLHNFQUF3QixDQUFBO1FBQ3hCLDBFQUEwQixDQUFBO1FBQzFCLHdGQUFpQyxDQUFBO1FBRWpDLDhGQUE4RjtRQUM5Riw0RUFBMkIsQ0FBQTtRQUUzQjs7O1dBR0c7UUFDSCwwR0FBMEMsQ0FBQTtRQUUxQzs7O1dBR0c7UUFDSCxvSEFBK0MsQ0FBQTtRQUUvQzs7O1dBR0c7UUFDSCw0RkFBbUMsQ0FBQTtRQUVuQzs7O1dBR0c7UUFDSCw4R0FBNEMsQ0FBQTtRQUU1QywwRUFBMEIsQ0FBQTtRQUMxQiw0R0FBMkMsQ0FBQTtRQUMzQzs7O1dBR0c7UUFDSCw4RUFBNEIsQ0FBQTtRQUU1QiwwRkFBa0MsQ0FBQTtRQUNsQyxrSkFBOEQsQ0FBQTtRQUU5RDs7O1dBR0c7UUFDSCxvRkFBK0IsQ0FBQTtRQUUvQjs7V0FFRztRQUNILDRFQUEyQixDQUFBO1FBRTNCOztXQUVHO1FBQ0gsNEZBQW1DLENBQUE7UUFFbkM7O1dBRUc7UUFDSCxrRkFBOEIsQ0FBQTtRQUU5Qjs7V0FFRztRQUNILGtGQUE4QixDQUFBO1FBRTlCOzs7V0FHRztRQUNILHNGQUFnQyxDQUFBO1FBRWhDOzs7V0FHRztRQUNILGdJQUFxRCxDQUFBO1FBRXJEOzs7V0FHRztRQUNILG9HQUF1QyxDQUFBO1FBRXZDOztXQUVHO1FBQ0gsa0dBQXNDLENBQUE7UUFFdEM7OztXQUdHO1FBQ0gsc0dBQXdDLENBQUE7UUFFeEM7O1dBRUc7UUFDSCxnRkFBNkIsQ0FBQTtRQUU3Qjs7V0FFRztRQUNILG9GQUErQixDQUFBO1FBRS9COztXQUVHO1FBQ0gsb0ZBQStCLENBQUE7UUFFL0I7O1dBRUc7UUFDSCw0REFBbUIsQ0FBQTtRQUVuQjs7Ozs7Ozs7Ozs7V0FXRztRQUNILDBGQUFrQyxDQUFBO1FBRWxDOzs7Ozs7O1dBT0c7UUFDSCxnR0FBcUMsQ0FBQTtRQUVyQzs7O1dBR0c7UUFDSCw4RUFBNEIsQ0FBQTtRQUU1Qjs7Ozs7OztXQU9HO1FBQ0gsOEVBQTRCLENBQUE7UUFFNUI7Ozs7Ozs7V0FPRztRQUNILGtHQUFzQyxDQUFBO1FBRXRDOzs7V0FHRztRQUNILDBFQUEwQixDQUFBO1FBRTFCOzs7V0FHRztRQUNILHNGQUFnQyxDQUFBO1FBRWhDOztXQUVHO1FBQ0gsc0ZBQWdDLENBQUE7UUFFaEMsNEVBQTRFO1FBQzVFLGlHQUFpRztRQUNqRyxzRkFBc0Y7UUFFdEY7OztXQUdHO1FBQ0gscUZBQWdDLENBQUE7UUFFaEM7Ozs7V0FJRztRQUNILHVHQUF5QyxDQUFBO0lBQzNDLENBQUMsRUF4TlcsU0FBUyxHQUFULGlCQUFTLEtBQVQsaUJBQVMsUUF3TnBCO0lBRUQ7Ozs7O09BS0c7SUFDVSxRQUFBLDJCQUEyQixHQUFHLDJCQUEyQixDQUFDO0lBRXZFOzs7O09BSUc7SUFDVSxRQUFBLDJCQUEyQixHQUFHLElBQUksR0FBRyxDQUFDO1FBQ2pELFNBQVMsQ0FBQyx5QkFBeUI7UUFDbkMsU0FBUyxDQUFDLHFCQUFxQjtRQUMvQixTQUFTLENBQUMsbUJBQW1CO1FBQzdCLFNBQVMsQ0FBQyxzQkFBc0I7UUFDaEMsU0FBUyxDQUFDLHdCQUF3QjtRQUNsQyxTQUFTLENBQUMsd0JBQXdCO1FBQ2xDLFNBQVMsQ0FBQyxxQ0FBcUM7S0FDaEQsQ0FBQyxDQUFDO0lBRUg7O09BRUc7SUFDSCxTQUFnQixXQUFXLENBQUMsSUFBZTtRQUN6QyxPQUFPLFFBQVEsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUZELGtDQUVDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbi8qKlxuICogQHB1YmxpY0FwaVxuICovXG5leHBvcnQgZW51bSBFcnJvckNvZGUge1xuICBERUNPUkFUT1JfQVJHX05PVF9MSVRFUkFMID0gMTAwMSxcbiAgREVDT1JBVE9SX0FSSVRZX1dST05HID0gMTAwMixcbiAgREVDT1JBVE9SX05PVF9DQUxMRUQgPSAxMDAzLFxuICBERUNPUkFUT1JfT05fQU5PTllNT1VTX0NMQVNTID0gMTAwNCxcbiAgREVDT1JBVE9SX1VORVhQRUNURUQgPSAxMDA1LFxuXG4gIC8qKlxuICAgKiBUaGlzIGVycm9yIGNvZGUgaW5kaWNhdGVzIHRoYXQgdGhlcmUgYXJlIGluY29tcGF0aWJsZSBkZWNvcmF0b3JzIG9uIGEgdHlwZSBvciBhIGNsYXNzIGZpZWxkLlxuICAgKi9cbiAgREVDT1JBVE9SX0NPTExJU0lPTiA9IDEwMDYsXG5cbiAgVkFMVUVfSEFTX1dST05HX1RZUEUgPSAxMDEwLFxuICBWQUxVRV9OT1RfTElURVJBTCA9IDEwMTEsXG5cbiAgQ09NUE9ORU5UX01JU1NJTkdfVEVNUExBVEUgPSAyMDAxLFxuICBQSVBFX01JU1NJTkdfTkFNRSA9IDIwMDIsXG4gIFBBUkFNX01JU1NJTkdfVE9LRU4gPSAyMDAzLFxuICBESVJFQ1RJVkVfTUlTU0lOR19TRUxFQ1RPUiA9IDIwMDQsXG5cbiAgLyoqIFJhaXNlZCB3aGVuIGFuIHVuZGVjb3JhdGVkIGNsYXNzIGlzIHBhc3NlZCBpbiBhcyBhIHByb3ZpZGVyIHRvIGEgbW9kdWxlIG9yIGEgZGlyZWN0aXZlLiAqL1xuICBVTkRFQ09SQVRFRF9QUk9WSURFUiA9IDIwMDUsXG5cbiAgLyoqXG4gICAqIFJhaXNlZCB3aGVuIGEgRGlyZWN0aXZlIGluaGVyaXRzIGl0cyBjb25zdHJ1Y3RvciBmcm9tIGEgYmFzZSBjbGFzcyB3aXRob3V0IGFuIEFuZ3VsYXJcbiAgICogZGVjb3JhdG9yLlxuICAgKi9cbiAgRElSRUNUSVZFX0lOSEVSSVRTX1VOREVDT1JBVEVEX0NUT1IgPSAyMDA2LFxuXG4gIC8qKlxuICAgKiBSYWlzZWQgd2hlbiBhbiB1bmRlY29yYXRlZCBjbGFzcyB0aGF0IGlzIHVzaW5nIEFuZ3VsYXIgZmVhdHVyZXNcbiAgICogaGFzIGJlZW4gZGlzY292ZXJlZC5cbiAgICovXG4gIFVOREVDT1JBVEVEX0NMQVNTX1VTSU5HX0FOR1VMQVJfRkVBVFVSRVMgPSAyMDA3LFxuXG4gIC8qKlxuICAgKiBSYWlzZWQgd2hlbiBhbiBjb21wb25lbnQgY2Fubm90IHJlc29sdmUgYW4gZXh0ZXJuYWwgcmVzb3VyY2UsIHN1Y2ggYXMgYSB0ZW1wbGF0ZSBvciBhIHN0eWxlXG4gICAqIHNoZWV0LlxuICAgKi9cbiAgQ09NUE9ORU5UX1JFU09VUkNFX05PVF9GT1VORCA9IDIwMDgsXG5cbiAgLyoqXG4gICAqIFJhaXNlZCB3aGVuIGEgY29tcG9uZW50IHVzZXMgYFNoYWRvd0RvbWAgdmlldyBlbmNhcHN1bGF0aW9uLCBidXQgaXRzIHNlbGVjdG9yXG4gICAqIGRvZXMgbm90IG1hdGNoIHRoZSBzaGFkb3cgRE9NIHRhZyBuYW1lIHJlcXVpcmVtZW50cy5cbiAgICovXG4gIENPTVBPTkVOVF9JTlZBTElEX1NIQURPV19ET01fU0VMRUNUT1IgPSAyMDA5LFxuXG4gIFNZTUJPTF9OT1RfRVhQT1JURUQgPSAzMDAxLFxuICBTWU1CT0xfRVhQT1JURURfVU5ERVJfRElGRkVSRU5UX05BTUUgPSAzMDAyLFxuICAvKipcbiAgICogUmFpc2VkIHdoZW4gYSByZWxhdGlvbnNoaXAgYmV0d2VlbiBkaXJlY3RpdmVzIGFuZC9vciBwaXBlcyB3b3VsZCBjYXVzZSBhIGN5Y2xpYyBpbXBvcnQgdG8gYmVcbiAgICogY3JlYXRlZCB0aGF0IGNhbm5vdCBiZSBoYW5kbGVkLCBzdWNoIGFzIGluIHBhcnRpYWwgY29tcGlsYXRpb24gbW9kZS5cbiAgICovXG4gIElNUE9SVF9DWUNMRV9ERVRFQ1RFRCA9IDMwMDMsXG5cbiAgQ09ORklHX0ZMQVRfTU9EVUxFX05PX0lOREVYID0gNDAwMSxcbiAgQ09ORklHX1NUUklDVF9URU1QTEFURVNfSU1QTElFU19GVUxMX1RFTVBMQVRFX1RZUEVDSEVDSyA9IDQwMDIsXG5cbiAgLyoqXG4gICAqIFJhaXNlZCB3aGVuIGEgaG9zdCBleHByZXNzaW9uIGhhcyBhIHBhcnNlIGVycm9yLCBzdWNoIGFzIGEgaG9zdCBsaXN0ZW5lciBvciBob3N0IGJpbmRpbmdcbiAgICogZXhwcmVzc2lvbiBjb250YWluaW5nIGEgcGlwZS5cbiAgICovXG4gIEhPU1RfQklORElOR19QQVJTRV9FUlJPUiA9IDUwMDEsXG5cbiAgLyoqXG4gICAqIFJhaXNlZCB3aGVuIHRoZSBjb21waWxlciBjYW5ub3QgcGFyc2UgYSBjb21wb25lbnQncyB0ZW1wbGF0ZS5cbiAgICovXG4gIFRFTVBMQVRFX1BBUlNFX0VSUk9SID0gNTAwMixcblxuICAvKipcbiAgICogUmFpc2VkIHdoZW4gYW4gTmdNb2R1bGUgY29udGFpbnMgYW4gaW52YWxpZCByZWZlcmVuY2UgaW4gYGRlY2xhcmF0aW9uc2AuXG4gICAqL1xuICBOR01PRFVMRV9JTlZBTElEX0RFQ0xBUkFUSU9OID0gNjAwMSxcblxuICAvKipcbiAgICogUmFpc2VkIHdoZW4gYW4gTmdNb2R1bGUgY29udGFpbnMgYW4gaW52YWxpZCB0eXBlIGluIGBpbXBvcnRzYC5cbiAgICovXG4gIE5HTU9EVUxFX0lOVkFMSURfSU1QT1JUID0gNjAwMixcblxuICAvKipcbiAgICogUmFpc2VkIHdoZW4gYW4gTmdNb2R1bGUgY29udGFpbnMgYW4gaW52YWxpZCB0eXBlIGluIGBleHBvcnRzYC5cbiAgICovXG4gIE5HTU9EVUxFX0lOVkFMSURfRVhQT1JUID0gNjAwMyxcblxuICAvKipcbiAgICogUmFpc2VkIHdoZW4gYW4gTmdNb2R1bGUgY29udGFpbnMgYSB0eXBlIGluIGBleHBvcnRzYCB3aGljaCBpcyBuZWl0aGVyIGluIGBkZWNsYXJhdGlvbnNgIG5vclxuICAgKiBvdGhlcndpc2UgaW1wb3J0ZWQuXG4gICAqL1xuICBOR01PRFVMRV9JTlZBTElEX1JFRVhQT1JUID0gNjAwNCxcblxuICAvKipcbiAgICogUmFpc2VkIHdoZW4gYSBgTW9kdWxlV2l0aFByb3ZpZGVyc2Agd2l0aCBhIG1pc3NpbmdcbiAgICogZ2VuZXJpYyB0eXBlIGFyZ3VtZW50IGlzIHBhc3NlZCBpbnRvIGFuIGBOZ01vZHVsZWAuXG4gICAqL1xuICBOR01PRFVMRV9NT0RVTEVfV0lUSF9QUk9WSURFUlNfTUlTU0lOR19HRU5FUklDID0gNjAwNSxcblxuICAvKipcbiAgICogUmFpc2VkIHdoZW4gYW4gTmdNb2R1bGUgZXhwb3J0cyBtdWx0aXBsZSBkaXJlY3RpdmVzL3BpcGVzIG9mIHRoZSBzYW1lIG5hbWUgYW5kIHRoZSBjb21waWxlclxuICAgKiBhdHRlbXB0cyB0byBnZW5lcmF0ZSBwcml2YXRlIHJlLWV4cG9ydHMgd2l0aGluIHRoZSBOZ01vZHVsZSBmaWxlLlxuICAgKi9cbiAgTkdNT0RVTEVfUkVFWFBPUlRfTkFNRV9DT0xMSVNJT04gPSA2MDA2LFxuXG4gIC8qKlxuICAgKiBSYWlzZWQgd2hlbiBhIGRpcmVjdGl2ZS9waXBlIGlzIHBhcnQgb2YgdGhlIGRlY2xhcmF0aW9ucyBvZiB0d28gb3IgbW9yZSBOZ01vZHVsZXMuXG4gICAqL1xuICBOR01PRFVMRV9ERUNMQVJBVElPTl9OT1RfVU5JUVVFID0gNjAwNyxcblxuICAvKipcbiAgICogTm90IGFjdHVhbGx5IHJhaXNlZCBieSB0aGUgY29tcGlsZXIsIGJ1dCByZXNlcnZlZCBmb3IgZG9jdW1lbnRhdGlvbiBvZiBhIFZpZXcgRW5naW5lIGVycm9yIHdoZW5cbiAgICogYSBWaWV3IEVuZ2luZSBidWlsZCBkZXBlbmRzIG9uIGFuIEl2eS1jb21waWxlZCBOZ01vZHVsZS5cbiAgICovXG4gIE5HTU9EVUxFX1ZFX0RFUEVOREVOQ1lfT05fSVZZX0xJQiA9IDY5OTksXG5cbiAgLyoqXG4gICAqIEFuIGVsZW1lbnQgbmFtZSBmYWlsZWQgdmFsaWRhdGlvbiBhZ2FpbnN0IHRoZSBET00gc2NoZW1hLlxuICAgKi9cbiAgU0NIRU1BX0lOVkFMSURfRUxFTUVOVCA9IDgwMDEsXG5cbiAgLyoqXG4gICAqIEFuIGVsZW1lbnQncyBhdHRyaWJ1dGUgbmFtZSBmYWlsZWQgdmFsaWRhdGlvbiBhZ2FpbnN0IHRoZSBET00gc2NoZW1hLlxuICAgKi9cbiAgU0NIRU1BX0lOVkFMSURfQVRUUklCVVRFID0gODAwMixcblxuICAvKipcbiAgICogTm8gbWF0Y2hpbmcgZGlyZWN0aXZlIHdhcyBmb3VuZCBmb3IgYSBgI3JlZj1cInRhcmdldFwiYCBleHByZXNzaW9uLlxuICAgKi9cbiAgTUlTU0lOR19SRUZFUkVOQ0VfVEFSR0VUID0gODAwMyxcblxuICAvKipcbiAgICogTm8gbWF0Y2hpbmcgcGlwZSB3YXMgZm91bmQgZm9yIGFcbiAgICovXG4gIE1JU1NJTkdfUElQRSA9IDgwMDQsXG5cbiAgLyoqXG4gICAqIFRoZSBsZWZ0LWhhbmQgc2lkZSBvZiBhbiBhc3NpZ25tZW50IGV4cHJlc3Npb24gd2FzIGEgdGVtcGxhdGUgdmFyaWFibGUuIEVmZmVjdGl2ZWx5LCB0aGVcbiAgICogdGVtcGxhdGUgbG9va2VkIGxpa2U6XG4gICAqXG4gICAqIGBgYFxuICAgKiA8bmctdGVtcGxhdGUgbGV0LXNvbWV0aGluZz5cbiAgICogICA8YnV0dG9uIChjbGljayk9XCJzb21ldGhpbmcgPSAuLi5cIj4uLi48L2J1dHRvbj5cbiAgICogPC9uZy10ZW1wbGF0ZT5cbiAgICogYGBgXG4gICAqXG4gICAqIFRlbXBsYXRlIHZhcmlhYmxlcyBhcmUgcmVhZC1vbmx5LlxuICAgKi9cbiAgV1JJVEVfVE9fUkVBRF9PTkxZX1ZBUklBQkxFID0gODAwNSxcblxuICAvKipcbiAgICogQSB0ZW1wbGF0ZSB2YXJpYWJsZSB3YXMgZGVjbGFyZWQgdHdpY2UuIEZvciBleGFtcGxlOlxuICAgKlxuICAgKiBgYGBodG1sXG4gICAqIDxkaXYgKm5nRm9yPVwibGV0IGkgb2YgaXRlbXM7IGxldCBpID0gaW5kZXhcIj5cbiAgICogPC9kaXY+XG4gICAqIGBgYFxuICAgKi9cbiAgRFVQTElDQVRFX1ZBUklBQkxFX0RFQ0xBUkFUSU9OID0gODAwNixcblxuICAvKipcbiAgICogQSB0ZW1wbGF0ZSBoYXMgYSB0d28gd2F5IGJpbmRpbmcgKHR3byBiaW5kaW5ncyBjcmVhdGVkIGJ5IGEgc2luZ2xlIHN5bnRhY3RpYWwgZWxlbWVudClcbiAgICogaW4gd2hpY2ggdGhlIGlucHV0IGFuZCBvdXRwdXQgYXJlIGdvaW5nIHRvIGRpZmZlcmVudCBwbGFjZXMuXG4gICAqL1xuICBTUExJVF9UV09fV0FZX0JJTkRJTkcgPSA4MDA3LFxuXG4gIC8qKlxuICAgKiBBIHR3byB3YXkgYmluZGluZyBpbiBhIHRlbXBsYXRlIGhhcyBhbiBpbmNvcnJlY3Qgc3ludGF4LFxuICAgKiBwYXJlbnRoZXNlcyBvdXRzaWRlIGJyYWNrZXRzLiBGb3IgZXhhbXBsZTpcbiAgICpcbiAgICogYGBgXG4gICAqIDxkaXYgKFtmb29dKT1cImJhclwiIC8+XG4gICAqIGBgYFxuICAgKi9cbiAgSU5WQUxJRF9CQU5BTkFfSU5fQk9YID0gODEwMSxcblxuICAvKipcbiAgICogVGhlIGxlZnQgc2lkZSBvZiBhIG51bGxpc2ggY29hbGVzY2luZyBvcGVyYXRpb24gaXMgbm90IG51bGxhYmxlLlxuICAgKlxuICAgKiBgYGBcbiAgICoge3sgZm9vID8/IGJhciB9fVxuICAgKiBgYGBcbiAgICogV2hlbiB0aGUgdHlwZSBvZiBmb28gZG9lc24ndCBpbmNsdWRlIGBudWxsYCBvciBgdW5kZWZpbmVkYC5cbiAgICovXG4gIE5VTExJU0hfQ09BTEVTQ0lOR19OT1RfTlVMTEFCTEUgPSA4MTAyLFxuXG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgdHlwZS1jaGVja2luZyBlbmdpbmUgd291bGQgbmVlZCB0byBnZW5lcmF0ZSBhbiBpbmxpbmUgdHlwZSBjaGVjayBibG9jayBmb3IgYVxuICAgKiBjb21wb25lbnQsIGJ1dCB0aGUgY3VycmVudCB0eXBlLWNoZWNraW5nIGVudmlyb25tZW50IGRvZXNuJ3Qgc3VwcG9ydCBpdC5cbiAgICovXG4gIElOTElORV9UQ0JfUkVRVUlSRUQgPSA4OTAwLFxuXG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgdHlwZS1jaGVja2luZyBlbmdpbmUgd291bGQgbmVlZCB0byBnZW5lcmF0ZSBhbiBpbmxpbmUgdHlwZSBjb25zdHJ1Y3RvciBmb3IgYVxuICAgKiBkaXJlY3RpdmUgb3IgY29tcG9uZW50LCBidXQgdGhlIGN1cnJlbnQgdHlwZS1jaGVja2luZyBlbnZpcm9ubWVudCBkb2Vzbid0IHN1cHBvcnQgaXQuXG4gICAqL1xuICBJTkxJTkVfVFlQRV9DVE9SX1JFUVVJUkVEID0gODkwMSxcblxuICAvKipcbiAgICogQW4gaW5qZWN0YWJsZSBhbHJlYWR5IGhhcyBhIGDJtXByb3ZgIHByb3BlcnR5LlxuICAgKi9cbiAgSU5KRUNUQUJMRV9EVVBMSUNBVEVfUFJPViA9IDkwMDEsXG5cbiAgLy8gMTBYWFggZXJyb3IgY29kZXMgYXJlIHJlc2VydmVkIGZvciBkaWFnbm9zdGljcyB3aXRoIGNhdGVnb3JpZXMgb3RoZXIgdGhhblxuICAvLyBgdHMuRGlhZ25vc3RpY0NhdGVnb3J5LkVycm9yYC4gVGhlc2UgZGlhZ25vc3RpY3MgYXJlIGdlbmVyYXRlZCBieSB0aGUgY29tcGlsZXIgd2hlbiBjb25maWd1cmVkXG4gIC8vIHRvIGRvIHNvIGJ5IGEgdG9vbCBzdWNoIGFzIHRoZSBMYW5ndWFnZSBTZXJ2aWNlLCBvciBieSB0aGUgTGFuZ3VhZ2UgU2VydmljZSBpdHNlbGYuXG5cbiAgLyoqXG4gICAqIFN1Z2dlc3QgdXNlcnMgdG8gZW5hYmxlIGBzdHJpY3RUZW1wbGF0ZXNgIHRvIG1ha2UgdXNlIG9mIGZ1bGwgY2FwYWJpbGl0aWVzXG4gICAqIHByb3ZpZGVkIGJ5IEFuZ3VsYXIgbGFuZ3VhZ2Ugc2VydmljZS5cbiAgICovXG4gIFNVR0dFU1RfU1RSSUNUX1RFTVBMQVRFUyA9IDEwMDAxLFxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhhdCBhIHBhcnRpY3VsYXIgc3RydWN0dXJhbCBkaXJlY3RpdmUgcHJvdmlkZXMgYWR2YW5jZWQgdHlwZSBuYXJyb3dpbmdcbiAgICogZnVuY3Rpb25hbGl0eSwgYnV0IHRoZSBjdXJyZW50IHRlbXBsYXRlIHR5cGUtY2hlY2tpbmcgY29uZmlndXJhdGlvbiBkb2VzIG5vdCBhbGxvdyBpdHMgdXNhZ2UgaW5cbiAgICogdHlwZSBpbmZlcmVuY2UuXG4gICAqL1xuICBTVUdHRVNUX1NVQk9QVElNQUxfVFlQRV9JTkZFUkVOQ0UgPSAxMDAwMixcbn1cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqIEJhc2UgVVJMIGZvciB0aGUgZXJyb3IgZGV0YWlscyBwYWdlLlxuICogS2VlcCB0aGlzIHZhbHVlIGluIHN5bmMgd2l0aCBhIHNpbWlsYXIgY29uc3QgaW5cbiAqIGBwYWNrYWdlcy9jb3JlL3NyYy9yZW5kZXIzL2Vycm9yX2NvZGUudHNgLlxuICovXG5leHBvcnQgY29uc3QgRVJST1JfREVUQUlMU19QQUdFX0JBU0VfVVJMID0gJ2h0dHBzOi8vYW5ndWxhci5pby9lcnJvcnMnO1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICogQ29udGFpbnMgYSBzZXQgb2YgZXJyb3IgbWVzc2FnZXMgdGhhdCBoYXZlIGRldGFpbGVkIGd1aWRlcyBhdCBhbmd1bGFyLmlvLlxuICogRnVsbCBsaXN0IG9mIGF2YWlsYWJsZSBlcnJvciBndWlkZXMgY2FuIGJlIGZvdW5kIGF0IGh0dHBzOi8vYW5ndWxhci5pby9lcnJvcnNcbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBJTEVSX0VSUk9SU19XSVRIX0dVSURFUyA9IG5ldyBTZXQoW1xuICBFcnJvckNvZGUuREVDT1JBVE9SX0FSR19OT1RfTElURVJBTCxcbiAgRXJyb3JDb2RlLklNUE9SVF9DWUNMRV9ERVRFQ1RFRCxcbiAgRXJyb3JDb2RlLlBBUkFNX01JU1NJTkdfVE9LRU4sXG4gIEVycm9yQ29kZS5TQ0hFTUFfSU5WQUxJRF9FTEVNRU5ULFxuICBFcnJvckNvZGUuU0NIRU1BX0lOVkFMSURfQVRUUklCVVRFLFxuICBFcnJvckNvZGUuTUlTU0lOR19SRUZFUkVOQ0VfVEFSR0VULFxuICBFcnJvckNvZGUuQ09NUE9ORU5UX0lOVkFMSURfU0hBRE9XX0RPTV9TRUxFQ1RPUixcbl0pO1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgZnVuY3Rpb24gbmdFcnJvckNvZGUoY29kZTogRXJyb3JDb2RlKTogbnVtYmVyIHtcbiAgcmV0dXJuIHBhcnNlSW50KCctOTknICsgY29kZSk7XG59XG4iXX0=
@@ -743,12 +743,12 @@ export interface ReflectionHost {
743
743
  */
744
744
  getAdjacentNameOfClass(clazz: ClassDeclaration): ts.Identifier;
745
745
  /**
746
- * Returns `true` if a class is exported from the module in which it's defined.
746
+ * Returns `true` if a declaration is exported from the module in which it's defined.
747
747
  *
748
- * Not all mechanisms by which a class is exported can be statically detected, especially when
749
- * processing already compiled JavaScript. A `false` result does not indicate that the class is
750
- * never visible outside its module, only that it was not exported via one of the export
751
- * mechanisms that the `ReflectionHost` is capable of statically checking.
748
+ * Not all mechanisms by which a declaration is exported can be statically detected, especially
749
+ * when processing already compiled JavaScript. A `false` result does not indicate that the
750
+ * declaration is never visible outside its module, only that it was not exported via one of the
751
+ * export mechanisms that the `ReflectionHost` is capable of statically checking.
752
752
  */
753
- isStaticallyExported(clazz: ClassDeclaration): boolean;
753
+ isStaticallyExported(decl: ts.Node): boolean;
754
754
  }
@@ -85,4 +85,4 @@
85
85
  }
86
86
  exports.isConcreteDeclaration = isConcreteDeclaration;
87
87
  });
88
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9zdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2MvcmVmbGVjdGlvbi9zcmMvaG9zdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7Ozs7SUFFSCwrQkFBaUM7SUFrRXBCLFFBQUEsU0FBUyxHQUFHO1FBQ3ZCLFlBQVksRUFBRSxVQUFDLFNBQW9CO1lBQ2pDLElBQUksU0FBUyxDQUFDLElBQUksS0FBSyxJQUFJLEVBQUU7Z0JBQzNCLE9BQU8sU0FBUyxDQUFDLElBQUksQ0FBQzthQUN2QjtpQkFBTTtnQkFDTCxrRUFBa0U7Z0JBQ2xFLE9BQVEsU0FBZ0MsQ0FBQyxjQUFjLENBQUM7YUFDekQ7UUFDSCxDQUFDO0tBQ0YsQ0FBQztJQVdGLFNBQWdCLHFCQUFxQixDQUFDLEdBQWtCO1FBQ3RELE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUM7WUFDdkIsRUFBRSxDQUFDLDBCQUEwQixDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQztnQkFDckUsRUFBRSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUpELHNEQUlDO0lBbUJEOztPQUVHO0lBQ0gsSUFBWSxlQU1YO0lBTkQsV0FBWSxlQUFlO1FBQ3pCLG1FQUFXLENBQUE7UUFDWCx5REFBTSxDQUFBO1FBQ04seURBQU0sQ0FBQTtRQUNOLDZEQUFRLENBQUE7UUFDUix5REFBTSxDQUFBO0lBQ1IsQ0FBQyxFQU5XLGVBQWUsR0FBZix1QkFBZSxLQUFmLHVCQUFlLFFBTTFCO0lBdVVEOztPQUVHO0lBQ0gsSUFBWSxnQkE4Qlg7SUE5QkQsV0FBWSxnQkFBZ0I7UUFDMUI7O1dBRUc7UUFDSCwyRUFBYyxDQUFBO1FBRWQ7O1dBRUc7UUFDSCwyRUFBYyxDQUFBO1FBRWQ7O1dBRUc7UUFDSCwyRUFBYyxDQUFBO1FBRWQ7O1dBRUc7UUFDSCx1RkFBb0IsQ0FBQTtRQUVwQjs7V0FFRztRQUNILHFGQUFtQixDQUFBO1FBRW5COztXQUVHO1FBQ0gsdUVBQVksQ0FBQTtJQUNkLENBQUMsRUE5QlcsZ0JBQWdCLEdBQWhCLHdCQUFnQixLQUFoQix3QkFBZ0IsUUE4QjNCO0lBMEdEOzs7T0FHRztJQUNILFNBQWdCLHFCQUFxQixDQUFDLElBQWlCO1FBQ3JELE9BQU8sSUFBSSxDQUFDLElBQUkscUJBQTZCLENBQUM7SUFDaEQsQ0FBQztJQUZELHNEQUVDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCAqIGFzIHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuXG4vKipcbiAqIE1ldGFkYXRhIGV4dHJhY3RlZCBmcm9tIGFuIGluc3RhbmNlIG9mIGEgZGVjb3JhdG9yIG9uIGFub3RoZXIgZGVjbGFyYXRpb24sIG9yIHN5bnRoZXNpemVkIGZyb21cbiAqIG90aGVyIGluZm9ybWF0aW9uIGFib3V0IGEgY2xhc3MuXG4gKi9cbmV4cG9ydCB0eXBlIERlY29yYXRvciA9IENvbmNyZXRlRGVjb3JhdG9yfFN5bnRoZXRpY0RlY29yYXRvcjtcblxuZXhwb3J0IGludGVyZmFjZSBCYXNlRGVjb3JhdG9yIHtcbiAgLyoqXG4gICAqIE5hbWUgYnkgd2hpY2ggdGhlIGRlY29yYXRvciB3YXMgaW52b2tlZCBpbiB0aGUgdXNlcidzIGNvZGUuXG4gICAqXG4gICAqIFRoaXMgaXMgZGlzdGluY3QgZnJvbSB0aGUgbmFtZSBieSB3aGljaCB0aGUgZGVjb3JhdG9yIHdhcyBpbXBvcnRlZCAodGhvdWdoIGluIHByYWN0aWNlIHRoZXlcbiAgICogd2lsbCB1c3VhbGx5IGJlIHRoZSBzYW1lKS5cbiAgICovXG4gIG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogSWRlbnRpZmllciB3aGljaCByZWZlcnMgdG8gdGhlIGRlY29yYXRvciBpbiB0aGUgdXNlcidzIGNvZGUuXG4gICAqL1xuICBpZGVudGlmaWVyOiBEZWNvcmF0b3JJZGVudGlmaWVyfG51bGw7XG5cbi8qKlxuICogYEltcG9ydGAgYnkgd2hpY2ggdGhlIGRlY29yYXRvciB3YXMgYnJvdWdodCBpbnRvIHRoZSBtb2R1bGUgaW4gd2hpY2ggaXQgd2FzIGludm9rZWQsIG9yIGBudWxsYFxuICogaWYgdGhlIGRlY29yYXRvciB3YXMgZGVjbGFyZWQgaW4gdGhlIHNhbWUgbW9kdWxlIGFuZCBub3QgaW1wb3J0ZWQuXG4gKi9cbmltcG9ydDogSW1wb3J0fG51bGw7XG5cbiAgLyoqXG4gICAqIFR5cGVTY3JpcHQgcmVmZXJlbmNlIHRvIHRoZSBkZWNvcmF0b3IgaXRzZWxmLCBvciBgbnVsbGAgaWYgdGhlIGRlY29yYXRvciBpcyBzeW50aGVzaXplZCAoZS5nLlxuICAgKiBpbiBuZ2NjKS5cbiAgICovXG4gIG5vZGU6IHRzLk5vZGV8bnVsbDtcblxuICAvKipcbiAgICogQXJndW1lbnRzIG9mIHRoZSBpbnZvY2F0aW9uIG9mIHRoZSBkZWNvcmF0b3IsIGlmIHRoZSBkZWNvcmF0b3IgaXMgaW52b2tlZCwgb3IgYG51bGxgXG4gICAqIG90aGVyd2lzZS5cbiAgICovXG4gIGFyZ3M6IHRzLkV4cHJlc3Npb25bXXxudWxsO1xufVxuXG4vKipcbiAqIE1ldGFkYXRhIGV4dHJhY3RlZCBmcm9tIGFuIGluc3RhbmNlIG9mIGEgZGVjb3JhdG9yIG9uIGFub3RoZXIgZGVjbGFyYXRpb24sIHdoaWNoIHdhcyBhY3R1YWxseVxuICogcHJlc2VudCBpbiBhIGZpbGUuXG4gKlxuICogQ29uY3JldGUgZGVjb3JhdG9ycyBhbHdheXMgaGF2ZSBhbiBgaWRlbnRpZmllcmAgYW5kIGEgYG5vZGVgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbmNyZXRlRGVjb3JhdG9yIGV4dGVuZHMgQmFzZURlY29yYXRvciB7XG4gIGlkZW50aWZpZXI6IERlY29yYXRvcklkZW50aWZpZXI7XG4gIG5vZGU6IHRzLk5vZGU7XG59XG5cbi8qKlxuICogU3ludGhldGljIGRlY29yYXRvcnMgbmV2ZXIgaGF2ZSBhbiBgaWRlbnRpZmllcmAgb3IgYSBgbm9kZWAsIGJ1dCBrbm93IHRoZSBub2RlIGZvciB3aGljaCB0aGV5XG4gKiB3ZXJlIHN5bnRoZXNpemVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN5bnRoZXRpY0RlY29yYXRvciBleHRlbmRzIEJhc2VEZWNvcmF0b3Ige1xuICBpZGVudGlmaWVyOiBudWxsO1xuICBub2RlOiBudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgYHRzLk5vZGVgIGZvciB3aGljaCB0aGlzIGRlY29yYXRvciB3YXMgY3JlYXRlZC5cbiAgICovXG4gIHN5bnRoZXNpemVkRm9yOiB0cy5Ob2RlO1xufVxuXG5leHBvcnQgY29uc3QgRGVjb3JhdG9yID0ge1xuICBub2RlRm9yRXJyb3I6IChkZWNvcmF0b3I6IERlY29yYXRvcik6IHRzLk5vZGUgPT4ge1xuICAgIGlmIChkZWNvcmF0b3Iubm9kZSAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGRlY29yYXRvci5ub2RlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUT0RPKGFseGh1Yik6IHdlIGNhbid0IHJlbHkgb24gbmFycm93aW5nIHVudGlsIFRTIDMuNiBpcyBpbiBnMy5cbiAgICAgIHJldHVybiAoZGVjb3JhdG9yIGFzIFN5bnRoZXRpY0RlY29yYXRvcikuc3ludGhlc2l6ZWRGb3I7XG4gICAgfVxuICB9LFxufTtcblxuLyoqXG4gKiBBIGRlY29yYXRvciBpcyBpZGVudGlmaWVkIGJ5IGVpdGhlciBhIHNpbXBsZSBpZGVudGlmaWVyIChlLmcuIGBEZWNvcmF0b3JgKSBvciwgaW4gc29tZSBjYXNlcyxcbiAqIGEgbmFtZXNwYWNlZCBwcm9wZXJ0eSBhY2Nlc3MgKGUuZy4gYGNvcmUuRGVjb3JhdG9yYCkuXG4gKi9cbmV4cG9ydCB0eXBlIERlY29yYXRvcklkZW50aWZpZXIgPSB0cy5JZGVudGlmaWVyfE5hbWVzcGFjZWRJZGVudGlmaWVyO1xuZXhwb3J0IHR5cGUgTmFtZXNwYWNlZElkZW50aWZpZXIgPSB0cy5Qcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24me1xuICBleHByZXNzaW9uOiB0cy5JZGVudGlmaWVyO1xuICBuYW1lOiB0cy5JZGVudGlmaWVyXG59O1xuZXhwb3J0IGZ1bmN0aW9uIGlzRGVjb3JhdG9ySWRlbnRpZmllcihleHA6IHRzLkV4cHJlc3Npb24pOiBleHAgaXMgRGVjb3JhdG9ySWRlbnRpZmllciB7XG4gIHJldHVybiB0cy5pc0lkZW50aWZpZXIoZXhwKSB8fFxuICAgICAgdHMuaXNQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24oZXhwKSAmJiB0cy5pc0lkZW50aWZpZXIoZXhwLmV4cHJlc3Npb24pICYmXG4gICAgICB0cy5pc0lkZW50aWZpZXIoZXhwLm5hbWUpO1xufVxuXG4vKipcbiAqIFRoZSBgdHMuRGVjbGFyYXRpb25gIG9mIGEgXCJjbGFzc1wiLlxuICpcbiAqIENsYXNzZXMgYXJlIHJlcHJlc2VudGVkIGRpZmZlcmVudGx5IGluIGRpZmZlcmVudCBjb2RlIGZvcm1hdHM6XG4gKiAtIEluIFRTIGNvZGUsIHRoZXkgYXJlIHR5cGljYWxseSBkZWZpbmVkIHVzaW5nIHRoZSBgY2xhc3NgIGtleXdvcmQuXG4gKiAtIEluIEVTMjAxNSBjb2RlLCB0aGV5IGFyZSB1c3VhbGx5IGRlZmluZWQgdXNpbmcgdGhlIGBjbGFzc2Aga2V5d29yZCwgYnV0IHRoZXkgY2FuIGFsc28gYmVcbiAqICAgdmFyaWFibGUgZGVjbGFyYXRpb25zLCB3aGljaCBhcmUgaW5pdGlhbGl6ZWQgdG8gYSBjbGFzcyBleHByZXNzaW9uIChlLmcuXG4gKiAgIGBsZXQgRm9vID0gRm9vMSA9IGNsYXNzIEZvbyB7fWApLlxuICogLSBJbiBFUzUgY29kZSwgdGhleSBhcmUgdHlwaWNhbGx5IGRlZmluZWQgYXMgdmFyaWFibGUgZGVjbGFyYXRpb25zIGJlaW5nIGFzc2lnbmVkIHRoZSByZXR1cm5cbiAqICAgdmFsdWUgb2YgYW4gSUlGRS4gVGhlIGFjdHVhbCBcImNsYXNzXCIgaXMgaW1wbGVtZW50ZWQgYXMgYSBjb25zdHJ1Y3RvciBmdW5jdGlvbiBpbnNpZGUgdGhlIElJRkUsXG4gKiAgIGJ1dCB0aGUgb3V0ZXIgdmFyaWFibGUgZGVjbGFyYXRpb24gcmVwcmVzZW50cyB0aGUgXCJjbGFzc1wiIHRvIHRoZSByZXN0IG9mIHRoZSBwcm9ncmFtLlxuICpcbiAqIEZvciBgUmVmbGVjdGlvbkhvc3RgIHB1cnBvc2VzLCBhIGNsYXNzIGRlY2xhcmF0aW9uIHNob3VsZCBhbHdheXMgaGF2ZSBhIGBuYW1lYCBpZGVudGlmaWVyLFxuICogYmVjYXVzZSB3ZSBuZWVkIHRvIGJlIGFibGUgdG8gcmVmZXJlbmNlIGl0IGluIG90aGVyIHBhcnRzIG9mIHRoZSBwcm9ncmFtLlxuICovXG5leHBvcnQgdHlwZSBDbGFzc0RlY2xhcmF0aW9uPFQgZXh0ZW5kcyBEZWNsYXJhdGlvbk5vZGUgPSBEZWNsYXJhdGlvbk5vZGU+ID0gVCZ7bmFtZTogdHMuSWRlbnRpZmllcn07XG5cbi8qKlxuICogQW4gZW51bWVyYXRpb24gb2YgcG9zc2libGUga2luZHMgb2YgY2xhc3MgbWVtYmVycy5cbiAqL1xuZXhwb3J0IGVudW0gQ2xhc3NNZW1iZXJLaW5kIHtcbiAgQ29uc3RydWN0b3IsXG4gIEdldHRlcixcbiAgU2V0dGVyLFxuICBQcm9wZXJ0eSxcbiAgTWV0aG9kLFxufVxuXG4vKipcbiAqIEEgbWVtYmVyIG9mIGEgY2xhc3MsIHN1Y2ggYXMgYSBwcm9wZXJ0eSwgbWV0aG9kLCBvciBjb25zdHJ1Y3Rvci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDbGFzc01lbWJlciB7XG4gIC8qKlxuICAgKiBUeXBlU2NyaXB0IHJlZmVyZW5jZSB0byB0aGUgY2xhc3MgbWVtYmVyIGl0c2VsZiwgb3IgbnVsbCBpZiBpdCBpcyBub3QgYXBwbGljYWJsZS5cbiAgICovXG4gIG5vZGU6IHRzLk5vZGV8bnVsbDtcblxuICAvKipcbiAgICogSW5kaWNhdGlvbiBvZiB3aGljaCB0eXBlIG9mIG1lbWJlciB0aGlzIGlzIChwcm9wZXJ0eSwgbWV0aG9kLCBldGMpLlxuICAgKi9cbiAga2luZDogQ2xhc3NNZW1iZXJLaW5kO1xuXG4gIC8qKlxuICAgKiBUeXBlU2NyaXB0IGB0cy5UeXBlTm9kZWAgcmVwcmVzZW50aW5nIHRoZSB0eXBlIG9mIHRoZSBtZW1iZXIsIG9yIGBudWxsYCBpZiBub3QgcHJlc2VudCBvclxuICAgKiBhcHBsaWNhYmxlLlxuICAgKi9cbiAgdHlwZTogdHMuVHlwZU5vZGV8bnVsbDtcblxuICAvKipcbiAgICogTmFtZSBvZiB0aGUgY2xhc3MgbWVtYmVyLlxuICAgKi9cbiAgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUeXBlU2NyaXB0IGB0cy5JZGVudGlmaWVyYCBvciBgdHMuU3RyaW5nTGl0ZXJhbGAgcmVwcmVzZW50aW5nIHRoZSBuYW1lIG9mIHRoZSBtZW1iZXIsIG9yIGBudWxsYFxuICAgKiBpZiBubyBzdWNoIG5vZGUgaXMgcHJlc2VudC5cbiAgICpcbiAgICogVGhlIGBuYW1lTm9kZWAgaXMgdXNlZnVsIGluIHdyaXRpbmcgcmVmZXJlbmNlcyB0byB0aGlzIG1lbWJlciB0aGF0IHdpbGwgYmUgY29ycmVjdGx5IHNvdXJjZS1cbiAgICogbWFwcGVkIGJhY2sgdG8gdGhlIG9yaWdpbmFsIGZpbGUuXG4gICAqL1xuICBuYW1lTm9kZTogdHMuSWRlbnRpZmllcnx0cy5TdHJpbmdMaXRlcmFsfG51bGw7XG5cbiAgLyoqXG4gICAqIFR5cGVTY3JpcHQgYHRzLkV4cHJlc3Npb25gIHdoaWNoIHJlcHJlc2VudHMgdGhlIHZhbHVlIG9mIHRoZSBtZW1iZXIuXG4gICAqXG4gICAqIElmIHRoZSBtZW1iZXIgaXMgYSBwcm9wZXJ0eSwgdGhpcyB3aWxsIGJlIHRoZSBwcm9wZXJ0eSBpbml0aWFsaXplciBpZiB0aGVyZSBpcyBvbmUsIG9yIG51bGxcbiAgICogb3RoZXJ3aXNlLlxuICAgKi9cbiAgdmFsdWU6IHRzLkV4cHJlc3Npb258bnVsbDtcblxuICAvKipcbiAgICogVHlwZVNjcmlwdCBgdHMuRGVjbGFyYXRpb25gIHdoaWNoIHJlcHJlc2VudHMgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtZW1iZXIuXG4gICAqXG4gICAqIEluIFR5cGVTY3JpcHQgY29kZSB0aGlzIGlzIGlkZW50aWNhbCB0byB0aGUgbm9kZSwgYnV0IGluIGRvd25sZXZlbGVkIGNvZGUgdGhpcyBzaG91bGQgYWx3YXlzIGJlXG4gICAqIHRoZSBEZWNsYXJhdGlvbiB3aGljaCBhY3R1YWxseSByZXByZXNlbnRzIHRoZSBtZW1iZXIncyBydW50aW1lIHZhbHVlLlxuICAgKlxuICAgKiBGb3IgZXhhbXBsZSwgdGhlIFRTIGNvZGU6XG4gICAqXG4gICAqIGBgYFxuICAgKiBjbGFzcyBDbGF6eiB7XG4gICAqICAgc3RhdGljIGdldCBwcm9wZXJ0eSgpOiBzdHJpbmcge1xuICAgKiAgICAgcmV0dXJuICd2YWx1ZSc7XG4gICAqICAgfVxuICAgKiB9XG4gICAqIGBgYFxuICAgKlxuICAgKiBEb3dubGV2ZWxzIHRvOlxuICAgKlxuICAgKiBgYGBcbiAgICogdmFyIENsYXp6ID0gKGZ1bmN0aW9uICgpIHtcbiAgICogICBmdW5jdGlvbiBDbGF6eigpIHtcbiAgICogICB9XG4gICAqICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENsYXp6LCBcInByb3BlcnR5XCIsIHtcbiAgICogICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAqICAgICAgICAgICByZXR1cm4gJ3ZhbHVlJztcbiAgICogICAgICAgfSxcbiAgICogICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICogICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAqICAgfSk7XG4gICAqICAgcmV0dXJuIENsYXp6O1xuICAgKiB9KCkpO1xuICAgKiBgYGBcbiAgICpcbiAgICogSW4gdGhpcyBleGFtcGxlLCBmb3IgdGhlIHByb3BlcnR5IFwicHJvcGVydHlcIiwgdGhlIG5vZGUgd291bGQgYmUgdGhlIGVudGlyZVxuICAgKiBPYmplY3QuZGVmaW5lUHJvcGVydHkgRXhwcmVzc2lvblN0YXRlbWVudCwgYnV0IHRoZSBpbXBsZW1lbnRhdGlvbiB3b3VsZCBiZSB0aGlzXG4gICAqIEZ1bmN0aW9uRGVjbGFyYXRpb246XG4gICAqXG4gICAqIGBgYFxuICAgKiBmdW5jdGlvbiAoKSB7XG4gICAqICAgcmV0dXJuICd2YWx1ZSc7XG4gICAqIH0sXG4gICAqIGBgYFxuICAgKi9cbiAgaW1wbGVtZW50YXRpb246IHRzLkRlY2xhcmF0aW9ufG51bGw7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIG1lbWJlciBpcyBzdGF0aWMgb3Igbm90LlxuICAgKi9cbiAgaXNTdGF0aWM6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEFueSBgRGVjb3JhdG9yYHMgd2hpY2ggYXJlIHByZXNlbnQgb24gdGhlIG1lbWJlciwgb3IgYG51bGxgIGlmIG5vbmUgYXJlIHByZXNlbnQuXG4gICAqL1xuICBkZWNvcmF0b3JzOiBEZWNvcmF0b3JbXXxudWxsO1xufVxuXG5leHBvcnQgY29uc3QgZW51bSBUeXBlVmFsdWVSZWZlcmVuY2VLaW5kIHtcbiAgTE9DQUwsXG4gIElNUE9SVEVELFxuICBVTkFWQUlMQUJMRSxcbn1cblxuLyoqXG4gKiBBIHR5cGUgcmVmZXJlbmNlIHRoYXQgcmVmZXJzIHRvIGFueSB0eXBlIHZpYSBhIGB0cy5FeHByZXNzaW9uYCB0aGF0J3MgdmFsaWQgd2l0aGluIHRoZSBsb2NhbCBmaWxlXG4gKiB3aGVyZSB0aGUgdHlwZSB3YXMgcmVmZXJlbmNlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2NhbFR5cGVWYWx1ZVJlZmVyZW5jZSB7XG4gIGtpbmQ6IFR5cGVWYWx1ZVJlZmVyZW5jZUtpbmQuTE9DQUw7XG5cbiAgLyoqXG4gICAqIFRoZSBzeW50aGVzaXplZCBleHByZXNzaW9uIHRvIHJlZmVyZW5jZSB0aGUgdHlwZSBpbiBhIHZhbHVlIHBvc2l0aW9uLlxuICAgKi9cbiAgZXhwcmVzc2lvbjogdHMuRXhwcmVzc2lvbjtcblxuICAvKipcbiAgICogSWYgdGhlIHR5cGUgb3JpZ2luYXRlcyBmcm9tIGEgZGVmYXVsdCBpbXBvcnQsIHRoZSBpbXBvcnQgc3RhdGVtZW50IGlzIGNhcHR1cmVkIGhlcmUgdG8gYmUgYWJsZVxuICAgKiB0byB0cmFjayBpdHMgdXNhZ2VzLCBwcmV2ZW50aW5nIHRoZSBpbXBvcnQgZnJvbSBiZWluZyBlbGlkZWQgaWYgaXQgd2FzIG9yaWdpbmFsbHkgb25seSB1c2VkIGluXG4gICAqIGEgdHlwZS1wb3NpdGlvbi4gU2VlIGBEZWZhdWx0SW1wb3J0VHJhY2tlcmAgZm9yIGRldGFpbHMuXG4gICAqL1xuICBkZWZhdWx0SW1wb3J0U3RhdGVtZW50OiB0cy5JbXBvcnREZWNsYXJhdGlvbnxudWxsO1xufVxuXG4vKipcbiAqIEEgcmVmZXJlbmNlIHRoYXQgcmVmZXJzIHRvIGEgdHlwZSB0aGF0IHdhcyBpbXBvcnRlZCwgYW5kIGdpdmVzIHRoZSBzeW1ib2wgYG5hbWVgIGFuZCB0aGVcbiAqIGBtb2R1bGVOYW1lYCBvZiB0aGUgaW1wb3J0LiBOb3RlIHRoYXQgdGhpcyBgbW9kdWxlTmFtZWAgbWF5IGJlIGEgcmVsYXRpdmUgcGF0aCwgYW5kIHRodXMgaXNcbiAqIGxpa2VseSBvbmx5IHZhbGlkIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgZmlsZSB3aGljaCBjb250YWluZWQgdGhlIG9yaWdpbmFsIHR5cGUgcmVmZXJlbmNlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEltcG9ydGVkVHlwZVZhbHVlUmVmZXJlbmNlIHtcbiAga2luZDogVHlwZVZhbHVlUmVmZXJlbmNlS2luZC5JTVBPUlRFRDtcblxuICAvKipcbiAgICogVGhlIG1vZHVsZSBzcGVjaWZpZXIgZnJvbSB3aGljaCB0aGUgYGltcG9ydGVkTmFtZWAgc3ltYm9sIHNob3VsZCBiZSBpbXBvcnRlZC5cbiAgICovXG4gIG1vZHVsZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHRvcC1sZXZlbCBzeW1ib2wgdGhhdCBpcyBpbXBvcnRlZCBmcm9tIGBtb2R1bGVOYW1lYC4gSWYgYG5lc3RlZFBhdGhgIGlzIGFsc29cbiAgICogcHJlc2VudCwgYSBuZXN0ZWQgb2JqZWN0IGlzIGJlaW5nIHJlZmVyZW5jZWQgZnJvbSB0aGUgdG9wLWxldmVsIHN5bWJvbC5cbiAgICovXG4gIGltcG9ydGVkTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJZiBwcmVzZW50LCByZXByZXNlbnRzIHRoZSBzeW1ib2wgbmFtZXMgdGhhdCBhcmUgcmVmZXJlbmNlZCBmcm9tIHRoZSB0b3AtbGV2ZWwgaW1wb3J0LlxuICAgKiBXaGVuIGBudWxsYCBvciBlbXB0eSwgdGhlIGBpbXBvcnRlZE5hbWVgIGl0c2VsZiBpcyB0aGUgc3ltYm9sIGJlaW5nIHJlZmVyZW5jZWQuXG4gICAqL1xuICBuZXN0ZWRQYXRoOiBzdHJpbmdbXXxudWxsO1xuXG4gIHZhbHVlRGVjbGFyYXRpb246IERlY2xhcmF0aW9uTm9kZTtcbn1cblxuLyoqXG4gKiBBIHJlcHJlc2VudGF0aW9uIGZvciBhIHR5cGUgdmFsdWUgcmVmZXJlbmNlIHRoYXQgaXMgdXNlZCB3aGVuIG5vIHZhbHVlIGlzIGF2YWlsYWJsZS4gVGhpcyBjYW5cbiAqIG9jY3VyIGR1ZSB0byB2YXJpb3VzIHJlYXNvbnMsIHdoaWNoIGlzIGluZGljYXRlZCBpbiB0aGUgYHJlYXNvbmAgZmllbGQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVW5hdmFpbGFibGVUeXBlVmFsdWVSZWZlcmVuY2Uge1xuICBraW5kOiBUeXBlVmFsdWVSZWZlcmVuY2VLaW5kLlVOQVZBSUxBQkxFO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVhc29uIHdoeSBubyB2YWx1ZSByZWZlcmVuY2UgY291bGQgYmUgZGV0ZXJtaW5lZCBmb3IgYSB0eXBlLlxuICAgKi9cbiAgcmVhc29uOiBVbmF2YWlsYWJsZVZhbHVlO1xufVxuXG4vKipcbiAqIFRoZSB2YXJpb3VzIHJlYXNvbnMgd2h5IHRoZSBjb21waWxlciBtYXkgYmUgdW5hYmxlIHRvIHN5bnRoZXNpemUgYSB2YWx1ZSBmcm9tIGEgdHlwZSByZWZlcmVuY2UuXG4gKi9cbmV4cG9ydCBjb25zdCBlbnVtIFZhbHVlVW5hdmFpbGFibGVLaW5kIHtcbiAgLyoqXG4gICAqIE5vIHR5cGUgbm9kZSB3YXMgYXZhaWxhYmxlLlxuICAgKi9cbiAgTUlTU0lOR19UWVBFLFxuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBkb2VzIG5vdCBoYXZlIGEgdmFsdWUgZGVjbGFyYXRpb24sIGUuZy4gYW4gaW50ZXJmYWNlLlxuICAgKi9cbiAgTk9fVkFMVUVfREVDTEFSQVRJT04sXG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIGlzIGltcG9ydGVkIHVzaW5nIGEgdHlwZS1vbmx5IGltcG9ydHMsIHNvIGl0IGlzIG5vdCBzdWl0YWJsZSB0byBiZSB1c2VkIGluIGFcbiAgICogdmFsdWUtcG9zaXRpb24uXG4gICAqL1xuICBUWVBFX09OTFlfSU1QT1JULFxuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSByZWZlcmVuY2UgY291bGQgbm90IGJlIHJlc29sdmVkIHRvIGEgZGVjbGFyYXRpb24uXG4gICAqL1xuICBVTktOT1dOX1JFRkVSRU5DRSxcblxuICAvKipcbiAgICogVGhlIHR5cGUgY29ycmVzcG9uZHMgd2l0aCBhIG5hbWVzcGFjZS5cbiAgICovXG4gIE5BTUVTUEFDRSxcblxuICAvKipcbiAgICogVGhlIHR5cGUgaXMgbm90IHN1cHBvcnRlZCBpbiB0aGUgY29tcGlsZXIsIGZvciBleGFtcGxlIHVuaW9uIHR5cGVzLlxuICAgKi9cbiAgVU5TVVBQT1JURUQsXG59XG5cblxuZXhwb3J0IGludGVyZmFjZSBVbnN1cHBvcnRlZFR5cGUge1xuICBraW5kOiBWYWx1ZVVuYXZhaWxhYmxlS2luZC5VTlNVUFBPUlRFRDtcbiAgdHlwZU5vZGU6IHRzLlR5cGVOb2RlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5vVmFsdWVEZWNsYXJhdGlvbiB7XG4gIGtpbmQ6IFZhbHVlVW5hdmFpbGFibGVLaW5kLk5PX1ZBTFVFX0RFQ0xBUkFUSU9OO1xuICB0eXBlTm9kZTogdHMuVHlwZU5vZGU7XG4gIGRlY2w6IHRzLkRlY2xhcmF0aW9ufG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHlwZU9ubHlJbXBvcnQge1xuICBraW5kOiBWYWx1ZVVuYXZhaWxhYmxlS2luZC5UWVBFX09OTFlfSU1QT1JUO1xuICB0eXBlTm9kZTogdHMuVHlwZU5vZGU7XG4gIGltcG9ydENsYXVzZTogdHMuSW1wb3J0Q2xhdXNlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5hbWVzcGFjZUltcG9ydCB7XG4gIGtpbmQ6IFZhbHVlVW5hdmFpbGFibGVLaW5kLk5BTUVTUEFDRTtcbiAgdHlwZU5vZGU6IHRzLlR5cGVOb2RlO1xuICBpbXBvcnRDbGF1c2U6IHRzLkltcG9ydENsYXVzZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVbmtub3duUmVmZXJlbmNlIHtcbiAga2luZDogVmFsdWVVbmF2YWlsYWJsZUtpbmQuVU5LTk9XTl9SRUZFUkVOQ0U7XG4gIHR5cGVOb2RlOiB0cy5UeXBlTm9kZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNaXNzaW5nVHlwZSB7XG4gIGtpbmQ6IFZhbHVlVW5hdmFpbGFibGVLaW5kLk1JU1NJTkdfVFlQRTtcbn1cblxuLyoqXG4gKiBUaGUgdmFyaW91cyByZWFzb25zIHdoeSBhIHR5cGUgbm9kZSBtYXkgbm90IGJlIHJlZmVycmVkIHRvIGFzIGEgdmFsdWUuXG4gKi9cbmV4cG9ydCB0eXBlIFVuYXZhaWxhYmxlVmFsdWUgPVxuICAgIFVuc3VwcG9ydGVkVHlwZXxOb1ZhbHVlRGVjbGFyYXRpb258VHlwZU9ubHlJbXBvcnR8TmFtZXNwYWNlSW1wb3J0fFVua25vd25SZWZlcmVuY2V8TWlzc2luZ1R5cGU7XG5cbi8qKlxuICogQSByZWZlcmVuY2UgdG8gYSB2YWx1ZSB0aGF0IG9yaWdpbmF0ZWQgZnJvbSBhIHR5cGUgcG9zaXRpb24uXG4gKlxuICogRm9yIGV4YW1wbGUsIGEgY29uc3RydWN0b3IgcGFyYW1ldGVyIGNvdWxkIGJlIGRlY2xhcmVkIGFzIGBmb286IEZvb2AuIEEgYFR5cGVWYWx1ZVJlZmVyZW5jZWBcbiAqIGV4dHJhY3RlZCBmcm9tIHRoaXMgd291bGQgcmVmZXIgdG8gdGhlIHZhbHVlIG9mIHRoZSBjbGFzcyBgRm9vYCAoYXNzdW1pbmcgaXQgd2FzIGFjdHVhbGx5IGFcbiAqIHR5cGUpLlxuICpcbiAqIFNlZSB0aGUgaW5kaXZpZHVhbCB0eXBlcyBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi5cbiAqL1xuZXhwb3J0IHR5cGUgVHlwZVZhbHVlUmVmZXJlbmNlID1cbiAgICBMb2NhbFR5cGVWYWx1ZVJlZmVyZW5jZXxJbXBvcnRlZFR5cGVWYWx1ZVJlZmVyZW5jZXxVbmF2YWlsYWJsZVR5cGVWYWx1ZVJlZmVyZW5jZTtcblxuLyoqXG4gKiBBIHBhcmFtZXRlciB0byBhIGNvbnN0cnVjdG9yLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEN0b3JQYXJhbWV0ZXIge1xuICAvKipcbiAgICogTmFtZSBvZiB0aGUgcGFyYW1ldGVyLCBpZiBhdmFpbGFibGUuXG4gICAqXG4gICAqIFNvbWUgcGFyYW1ldGVycyBkb24ndCBoYXZlIGEgc2ltcGxlIHN0cmluZyBuYW1lIChmb3IgZXhhbXBsZSwgcGFyYW1ldGVycyB3aGljaCBhcmUgZGVzdHJ1Y3R1cmVkXG4gICAqIGludG8gbXVsdGlwbGUgdmFyaWFibGVzKS4gSW4gdGhlc2UgY2FzZXMsIGBuYW1lYCBjYW4gYmUgYG51bGxgLlxuICAgKi9cbiAgbmFtZTogc3RyaW5nfG51bGw7XG5cbiAgLyoqXG4gICAqIFR5cGVTY3JpcHQgYHRzLkJpbmRpbmdOYW1lYCByZXByZXNlbnRpbmcgdGhlIG5hbWUgb2YgdGhlIHBhcmFtZXRlci5cbiAgICpcbiAgICogVGhlIGBuYW1lTm9kZWAgaXMgdXNlZnVsIGluIHdyaXRpbmcgcmVmZXJlbmNlcyB0byB0aGlzIG1lbWJlciB0aGF0IHdpbGwgYmUgY29ycmVjdGx5IHNvdXJjZS1cbiAgICogbWFwcGVkIGJhY2sgdG8gdGhlIG9yaWdpbmFsIGZpbGUuXG4gICAqL1xuICBuYW1lTm9kZTogdHMuQmluZGluZ05hbWU7XG5cbiAgLyoqXG4gICAqIFJlZmVyZW5jZSB0byB0aGUgdmFsdWUgb2YgdGhlIHBhcmFtZXRlcidzIHR5cGUgYW5ub3RhdGlvbiwgaWYgaXQncyBwb3NzaWJsZSB0byByZWZlciB0byB0aGVcbiAgICogcGFyYW1ldGVyJ3MgdHlwZSBhcyBhIHZhbHVlLlxuICAgKlxuICAgKiBUaGlzIGNhbiBlaXRoZXIgYmUgYSByZWZlcmVuY2UgdG8gYSBsb2NhbCB2YWx1ZSwgYSByZWZlcmVuY2UgdG8gYW4gaW1wb3J0ZWQgdmFsdWUsIG9yIG5vXG4gICAqIHZhbHVlIGlmIG5vIGlzIHByZXNlbnQgb3IgY2Fubm90IGJlIHJlcHJlc2VudGVkIGFzIGFuIGV4cHJlc3Npb24uXG4gICAqL1xuICB0eXBlVmFsdWVSZWZlcmVuY2U6IFR5cGVWYWx1ZVJlZmVyZW5jZTtcblxuICAvKipcbiAgICogVHlwZVNjcmlwdCBgdHMuVHlwZU5vZGVgIHJlcHJlc2VudGluZyB0aGUgdHlwZSBub2RlIGZvdW5kIGluIHRoZSB0eXBlIHBvc2l0aW9uLlxuICAgKlxuICAgKiBUaGlzIGZpZWxkIGNhbiBiZSB1c2VkIGZvciBkaWFnbm9zdGljcyByZXBvcnRpbmcgaWYgYHR5cGVWYWx1ZVJlZmVyZW5jZWAgaXMgYG51bGxgLlxuICAgKlxuICAgKiBDYW4gYmUgbnVsbCwgaWYgdGhlIHBhcmFtIGhhcyBubyB0eXBlIGRlY2xhcmVkLlxuICAgKi9cbiAgdHlwZU5vZGU6IHRzLlR5cGVOb2RlfG51bGw7XG5cbiAgLyoqXG4gICAqIEFueSBgRGVjb3JhdG9yYHMgd2hpY2ggYXJlIHByZXNlbnQgb24gdGhlIHBhcmFtZXRlciwgb3IgYG51bGxgIGlmIG5vbmUgYXJlIHByZXNlbnQuXG4gICAqL1xuICBkZWNvcmF0b3JzOiBEZWNvcmF0b3JbXXxudWxsO1xufVxuXG4vKipcbiAqIERlZmluaXRpb24gb2YgYSBmdW5jdGlvbiBvciBtZXRob2QsIGluY2x1ZGluZyBpdHMgYm9keSBpZiBwcmVzZW50IGFuZCBhbnkgcGFyYW1ldGVycy5cbiAqXG4gKiBJbiBUeXBlU2NyaXB0IGNvZGUgdGhpcyBtZXRhZGF0YSB3aWxsIGJlIGEgc2ltcGxlIHJlZmxlY3Rpb24gb2YgdGhlIGRlY2xhcmF0aW9ucyBpbiB0aGUgbm9kZVxuICogaXRzZWxmLiBJbiBFUzUgY29kZSB0aGlzIGNhbiBiZSBtb3JlIGNvbXBsaWNhdGVkLCBhcyB0aGUgZGVmYXVsdCB2YWx1ZXMgZm9yIHBhcmFtZXRlcnMgbWF5XG4gKiBiZSBleHRyYWN0ZWQgZnJvbSBjZXJ0YWluIGJvZHkgc3RhdGVtZW50cy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGdW5jdGlvbkRlZmluaXRpb24ge1xuICAvKipcbiAgICogQSByZWZlcmVuY2UgdG8gdGhlIG5vZGUgd2hpY2ggZGVjbGFyZXMgdGhlIGZ1bmN0aW9uLlxuICAgKi9cbiAgbm9kZTogdHMuTWV0aG9kRGVjbGFyYXRpb258dHMuRnVuY3Rpb25EZWNsYXJhdGlvbnx0cy5GdW5jdGlvbkV4cHJlc3Npb258dHMuVmFyaWFibGVEZWNsYXJhdGlvbjtcblxuICAvKipcbiAgICogU3RhdGVtZW50cyBvZiB0aGUgZnVuY3Rpb24gYm9keSwgaWYgYSBib2R5IGlzIHByZXNlbnQsIG9yIG51bGwgaWYgbm8gYm9keSBpcyBwcmVzZW50IG9yIHRoZVxuICAgKiBmdW5jdGlvbiBpcyBpZGVudGlmaWVkIHRvIHJlcHJlc2VudCBhIHRzbGliIGhlbHBlciBmdW5jdGlvbiwgaW4gd2hpY2ggY2FzZSBgaGVscGVyYCB3aWxsXG4gICAqIGluZGljYXRlIHdoaWNoIGhlbHBlciB0aGlzIGZ1bmN0aW9uIHJlcHJlc2VudHMuXG4gICAqXG4gICAqIFRoaXMgbGlzdCBtYXkgaGF2ZSBiZWVuIGZpbHRlcmVkIHRvIGV4Y2x1ZGUgc3RhdGVtZW50cyB3aGljaCBwZXJmb3JtIHBhcmFtZXRlciBkZWZhdWx0IHZhbHVlXG4gICAqIGluaXRpYWxpemF0aW9uLlxuICAgKi9cbiAgYm9keTogdHMuU3RhdGVtZW50W118bnVsbDtcblxuICAvKipcbiAgICogTWV0YWRhdGEgcmVnYXJkaW5nIHRoZSBmdW5jdGlvbidzIHBhcmFtZXRlcnMsIGluY2x1ZGluZyBwb3NzaWJsZSBkZWZhdWx0IHZhbHVlIGV4cHJlc3Npb25zLlxuICAgKi9cbiAgcGFyYW1ldGVyczogUGFyYW1ldGVyW107XG59XG5cbi8qKlxuICogUG9zc2libGUgZGVjbGFyYXRpb25zIG9mIGtub3duIHZhbHVlcywgc3VjaCBhcyBidWlsdC1pbiBvYmplY3RzL2Z1bmN0aW9ucyBvciBUeXBlU2NyaXB0IGhlbHBlcnMuXG4gKi9cbmV4cG9ydCBlbnVtIEtub3duRGVjbGFyYXRpb24ge1xuICAvKipcbiAgICogSW5kaWNhdGVzIHRoZSBKYXZhU2NyaXB0IGdsb2JhbCBgT2JqZWN0YCBjbGFzcy5cbiAgICovXG4gIEpzR2xvYmFsT2JqZWN0LFxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhlIGBfX2Fzc2lnbmAgVHlwZVNjcmlwdCBoZWxwZXIgZnVuY3Rpb24uXG4gICAqL1xuICBUc0hlbHBlckFzc2lnbixcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHRoZSBgX19zcHJlYWRgIFR5cGVTY3JpcHQgaGVscGVyIGZ1bmN0aW9uLlxuICAgKi9cbiAgVHNIZWxwZXJTcHJlYWQsXG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGUgYF9fc3ByZWFkQXJyYXlzYCBUeXBlU2NyaXB0IGhlbHBlciBmdW5jdGlvbi5cbiAgICovXG4gIFRzSGVscGVyU3ByZWFkQXJyYXlzLFxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhlIGBfX3NwcmVhZEFycmF5YCBUeXBlU2NyaXB0IGhlbHBlciBmdW5jdGlvbi5cbiAgICovXG4gIFRzSGVscGVyU3ByZWFkQXJyYXksXG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGUgYF9fcmVhZGAgVHlwZVNjcmlwdCBoZWxwZXIgZnVuY3Rpb24uXG4gICAqL1xuICBUc0hlbHBlclJlYWQsXG59XG5cbi8qKlxuICogQSBwYXJhbWV0ZXIgdG8gYSBmdW5jdGlvbiBvciBtZXRob2QuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFyYW1ldGVyIHtcbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIHBhcmFtZXRlciwgaWYgYXZhaWxhYmxlLlxuICAgKi9cbiAgbmFtZTogc3RyaW5nfG51bGw7XG5cbiAgLyoqXG4gICAqIERlY2xhcmF0aW9uIHdoaWNoIGNyZWF0ZWQgdGhpcyBwYXJhbWV0ZXIuXG4gICAqL1xuICBub2RlOiB0cy5QYXJhbWV0ZXJEZWNsYXJhdGlvbjtcblxuICAvKipcbiAgICogRXhwcmVzc2lvbiB3aGljaCByZXByZXNlbnRzIHRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSBwYXJhbWV0ZXIsIGlmIGFueS5cbiAgICovXG4gIGluaXRpYWxpemVyOiB0cy5FeHByZXNzaW9ufG51bGw7XG59XG5cbi8qKlxuICogVGhlIHNvdXJjZSBvZiBhbiBpbXBvcnRlZCBzeW1ib2wsIGluY2x1ZGluZyB0aGUgb3JpZ2luYWwgc3ltYm9sIG5hbWUgYW5kIHRoZSBtb2R1bGUgZnJvbSB3aGljaCBpdFxuICogd2FzIGltcG9ydGVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEltcG9ydCB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgaW1wb3J0ZWQgc3ltYm9sIHVuZGVyIHdoaWNoIGl0IHdhcyBleHBvcnRlZCAobm90IGltcG9ydGVkKS5cbiAgICovXG4gIG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG1vZHVsZSBmcm9tIHdoaWNoIHRoZSBzeW1ib2wgd2FzIGltcG9ydGVkLlxuICAgKlxuICAgKiBUaGlzIGNvdWxkIGVpdGhlciBiZSBhbiBhYnNvbHV0ZSBtb2R1bGUgbmFtZSAoQGFuZ3VsYXIvY29yZSBmb3IgZXhhbXBsZSkgb3IgYSByZWxhdGl2ZSBwYXRoLlxuICAgKi9cbiAgZnJvbTogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgc2luZ2xlIGVudW0gbWVtYmVyIGV4dHJhY3RlZCBmcm9tIEphdmFTY3JpcHQgd2hlbiBubyBgdHMuRW51bURlY2xhcmF0aW9uYCBpcyBhdmFpbGFibGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW51bU1lbWJlciB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgZW51bSBtZW1iZXIuXG4gICAqL1xuICBuYW1lOiB0cy5Qcm9wZXJ0eU5hbWU7XG5cbiAgLyoqXG4gICAqIFRoZSBpbml0aWFsaXplciBleHByZXNzaW9uIG9mIHRoZSBlbnVtIG1lbWJlci4gVW5saWtlIGluIFR5cGVTY3JpcHQsIHRoaXMgaXMgYWx3YXlzIGF2YWlsYWJsZVxuICAgKiBpbiBlbWl0dGVkIEphdmFTY3JpcHQuXG4gICAqL1xuICBpbml0aWFsaXplcjogdHMuRXhwcmVzc2lvbjtcbn1cblxuLyoqXG4gKiBBIHR5cGUgdGhhdCBpcyB1c2VkIHRvIGlkZW50aWZ5IGEgZGVjbGFyYXRpb24uXG4gKlxuICogRGVjbGFyYXRpb25zIGFyZSBub3JtYWxseSBgdHMuRGVjbGFyYXRpb25gIHR5cGVzIHN1Y2ggYXMgdmFyaWFibGUgZGVjbGFyYXRpb25zLCBjbGFzc1xuICogZGVjbGFyYXRpb25zLCBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgZXRjLlxuICogQnV0IGluIHNvbWUgY2FzZXMgdGhlcmUgaXMgbm8gYHRzLkRlY2xhcmF0aW9uYCB0aGF0IGNhbiBiZSB1c2VkIGZvciBhIGRlY2xhcmF0aW9uLCBzdWNoXG4gKiBhcyB3aGVuIHRoZXkgYXJlIGRlY2xhcmVkIGlubGluZSBhcyBwYXJ0IG9mIGFuIGV4cG9ydGVkIGV4cHJlc3Npb24uIFRoZW4gd2UgbXVzdCB1c2UgYVxuICogYHRzLkV4cHJlc3Npb25gIGFzIHRoZSBkZWNsYXJhdGlvbi5cbiAqIEFuIGV4YW1wbGUgb2YgdGhpcyBpcyBgZXhwb3J0cy5zb21lVmFyID0gNDJgIHdoZXJlIHRoZSBkZWNsYXJhdGlvbiBleHByZXNzaW9uIHdvdWxkIGJlXG4gKiBgZXhwb3J0cy5zb21lVmFyYC5cbiAqL1xuZXhwb3J0IHR5cGUgRGVjbGFyYXRpb25Ob2RlID0gdHMuRGVjbGFyYXRpb258dHMuRXhwcmVzc2lvbjtcblxuLyoqXG4gKiBUaGUgdHlwZSBvZiBhIERlY2xhcmF0aW9uIC0gd2hldGhlciBpdHMgbm9kZSBpcyBjb25jcmV0ZSAodHMuRGVjbGFyYXRpb24pIG9yIGlubGluZVxuICogKHRzLkV4cHJlc3Npb24pLiBTZWUgYENvbmNyZXRlRGVjbGFyYXRpb25gLCBgSW5saW5lRGVjbGFyYXRpb25gIGFuZCBgRGVjbGFyYXRpb25Ob2RlYCBmb3IgbW9yZVxuICogaW5mb3JtYXRpb24gYWJvdXQgdGhpcy5cbiAqL1xuZXhwb3J0IGNvbnN0IGVudW0gRGVjbGFyYXRpb25LaW5kIHtcbiAgQ29uY3JldGUsXG4gIElubGluZSxcbn1cblxuLyoqXG4gKiBCYXNlIHR5cGUgZm9yIGFsbCBgRGVjbGFyYXRpb25gcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCYXNlRGVjbGFyYXRpb248VCBleHRlbmRzIERlY2xhcmF0aW9uTm9kZT4ge1xuICAvKipcbiAgICogVGhlIHR5cGUgb2YgdGhlIHVuZGVybHlpbmcgYG5vZGVgLlxuICAgKi9cbiAga2luZDogRGVjbGFyYXRpb25LaW5kO1xuXG4gIC8qKlxuICAgKiBUaGUgYWJzb2x1dGUgbW9kdWxlIHBhdGggZnJvbSB3aGljaCB0aGUgc3ltYm9sIHdhcyBpbXBvcnRlZCBpbnRvIHRoZSBhcHBsaWNhdGlvbiwgaWYgdGhlIHN5bWJvbFxuICAgKiB3YXMgaW1wb3J0ZWQgdmlhIGFuIGFic29sdXRlIG1vZHVsZSAoZXZlbiB0aHJvdWdoIGEgY2hhaW4gb2YgcmUtZXhwb3J0cykuIElmIHRoZSBzeW1ib2wgaXMgcGFydFxuICAgKiBvZiB0aGUgYXBwbGljYXRpb24gYW5kIHdhcyBub3QgaW1wb3J0ZWQgZnJvbSBhbiBhYnNvbHV0ZSBwYXRoLCB0aGlzIHdpbGwgYmUgYG51bGxgLlxuICAgKi9cbiAgdmlhTW9kdWxlOiBzdHJpbmd8bnVsbDtcblxuICAvKipcbiAgICogVHlwZVNjcmlwdCByZWZlcmVuY2UgdG8gdGhlIGRlY2xhcmF0aW9uIGl0c2VsZiwgaWYgb25lIGV4aXN0cy5cbiAgICovXG4gIG5vZGU6IFQ7XG5cbiAgLyoqXG4gICAqIElmIHNldCwgZGVzY3JpYmVzIHRoZSB0eXBlIG9mIHRoZSBrbm93biBkZWNsYXJhdGlvbiB0aGlzIGRlY2xhcmF0aW9uIHJlc29sdmVzIHRvLlxuICAgKi9cbiAga25vd246IEtub3duRGVjbGFyYXRpb258bnVsbDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGBkZWNsYCBpcyBhIGBDb25jcmV0ZURlY2xhcmF0aW9uYCAoaWUuIHRoYXQgaXRzIGBub2RlYCBwcm9wZXJ0eSBpcyBhXG4gKiBgdHMuRGVjbGFyYXRpb25gKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ29uY3JldGVEZWNsYXJhdGlvbihkZWNsOiBEZWNsYXJhdGlvbik6IGRlY2wgaXMgQ29uY3JldGVEZWNsYXJhdGlvbiB7XG4gIHJldHVybiBkZWNsLmtpbmQgPT09IERlY2xhcmF0aW9uS2luZC5Db25jcmV0ZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb25jcmV0ZURlY2xhcmF0aW9uPFQgZXh0ZW5kcyB0cy5EZWNsYXJhdGlvbiA9IHRzLkRlY2xhcmF0aW9uPiBleHRlbmRzXG4gICAgQmFzZURlY2xhcmF0aW9uPFQ+IHtcbiAga2luZDogRGVjbGFyYXRpb25LaW5kLkNvbmNyZXRlO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbGx5IHJlcHJlc2VudHMgYSBzcGVjaWFsIGlkZW50aXR5IG9mIHRoZSBkZWNsYXJhdGlvbiwgb3IgYG51bGxgIGlmIHRoZSBkZWNsYXJhdGlvblxuICAgKiBkb2VzIG5vdCBoYXZlIGEgc3BlY2lhbCBpZGVudGl0eS5cbiAgICovXG4gIGlkZW50aXR5OiBTcGVjaWFsRGVjbGFyYXRpb25JZGVudGl0eXxudWxsO1xufVxuXG5leHBvcnQgdHlwZSBTcGVjaWFsRGVjbGFyYXRpb25JZGVudGl0eSA9IERvd25sZXZlbGVkRW51bTtcblxuZXhwb3J0IGNvbnN0IGVudW0gU3BlY2lhbERlY2xhcmF0aW9uS2luZCB7XG4gIERvd25sZXZlbGVkRW51bSxcbn1cblxuLyoqXG4gKiBBIHNwZWNpYWwgZGVjbGFyYXRpb24gaWRlbnRpdHkgdGhhdCByZXByZXNlbnRzIGFuIGVudW0uIFRoaXMgaXMgdXNlZCBpbiBkb3dubGV2ZWxlZCBmb3JtcyB3aGVyZVxuICogYSBgdHMuRW51bURlY2xhcmF0aW9uYCBpcyBlbWl0dGVkIGluIGFuIGFsdGVybmF0aXZlIGZvcm0sIGUuZy4gYW4gSUlGRSBjYWxsIHRoYXQgZGVjbGFyZXMgYWxsXG4gKiBtZW1iZXJzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERvd25sZXZlbGVkRW51bSB7XG4gIGtpbmQ6IFNwZWNpYWxEZWNsYXJhdGlvbktpbmQuRG93bmxldmVsZWRFbnVtO1xuICBlbnVtTWVtYmVyczogRW51bU1lbWJlcltdO1xufVxuXG4vKipcbiAqIEEgZGVjbGFyYXRpb24gdGhhdCBkb2VzIG5vdCBoYXZlIGFuIGFzc29jaWF0ZWQgVHlwZVNjcmlwdCBgdHMuRGVjbGFyYXRpb25gLlxuICpcbiAqIFRoaXMgY2FuIG9jY3VyIGluIHNvbWUgZG93bmxldmVsaW5ncyB3aGVuIGFuIGBleHBvcnQgY29uc3QgVkFSID0gLi4uO2AgKGEgYHRzLkRlY2xhcmF0aW9uYCkgaXNcbiAqIHRyYW5zcGlsZWQgdG8gYW4gYXNzaWdubWVudCBzdGF0ZW1lbnQgKGUuZy4gYGV4cG9ydHMuVkFSID0gLi4uO2ApLiBUaGVyZSBpcyBubyBgdHMuRGVjbGFyYXRpb25gXG4gKiBhc3NvY2lhdGVkIHdpdGggYFZBUmAgaW4gdGhhdCBjYXNlLCBvbmx5IGFuIGV4cHJlc3Npb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5saW5lRGVjbGFyYXRpb24gZXh0ZW5kc1xuICAgIEJhc2VEZWNsYXJhdGlvbjxFeGNsdWRlPERlY2xhcmF0aW9uTm9kZSwgdHMuRGVjbGFyYXRpb24+PiB7XG4gIGtpbmQ6IERlY2xhcmF0aW9uS2luZC5JbmxpbmU7XG4gIGltcGxlbWVudGF0aW9uPzogRGVjbGFyYXRpb25Ob2RlO1xufVxuXG4vKipcbiAqIFRoZSBkZWNsYXJhdGlvbiBvZiBhIHN5bWJvbCwgYWxvbmcgd2l0aCBpbmZvcm1hdGlvbiBhYm91dCBob3cgaXQgd2FzIGltcG9ydGVkIGludG8gdGhlXG4gKiBhcHBsaWNhdGlvbi5cbiAqL1xuZXhwb3J0IHR5cGUgRGVjbGFyYXRpb248VCBleHRlbmRzIHRzLkRlY2xhcmF0aW9uID0gdHMuRGVjbGFyYXRpb24+ID1cbiAgICBDb25jcmV0ZURlY2xhcmF0aW9uPFQ+fElubGluZURlY2xhcmF0aW9uO1xuXG4vKipcbiAqIEFic3RyYWN0cyByZWZsZWN0aW9uIG9wZXJhdGlvbnMgb24gYSBUeXBlU2NyaXB0IEFTVC5cbiAqXG4gKiBEZXBlbmRpbmcgb24gdGhlIGZvcm1hdCBvZiB0aGUgY29kZSBiZWluZyBpbnRlcnByZXRlZCwgZGlmZmVyZW50IGNvbmNlcHRzIGFyZSByZXByZXNlbnRlZFxuICogd2l0aCBkaWZmZXJlbnQgc3ludGFjdGljYWwgc3RydWN0dXJlcy4gVGhlIGBSZWZsZWN0aW9uSG9zdGAgYWJzdHJhY3RzIG92ZXIgdGhvc2UgZGlmZmVyZW5jZXMgYW5kXG4gKiBwcmVzZW50cyBhIHNpbmdsZSBBUEkgYnkgd2hpY2ggdGhlIGNvbXBpbGVyIGNhbiBxdWVyeSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgQVNULlxuICpcbiAqIEFsbCBvcGVyYXRpb25zIG9uIHRoZSBgUmVmbGVjdGlvbkhvc3RgIHJlcXVpcmUgdGhlIHVzZSBvZiBUeXBlU2NyaXB0IGB0cy5Ob2RlYHMgd2l0aCBiaW5kaW5nXG4gKiBpbmZvcm1hdGlvbiBhbHJlYWR5IGF2YWlsYWJsZSAodGhhdCBpcywgbm9kZXMgdGhhdCBjb21lIGZyb20gYSBgdHMuUHJvZ3JhbWAgdGhhdCBoYXMgYmVlblxuICogdHlwZS1jaGVja2VkLCBhbmQgYXJlIG5vdCBzeW50aGV0aWNhbGx5IGNyZWF0ZWQpLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZmxlY3Rpb25Ib3N0IHtcbiAgLyoqXG4gICAqIEV4YW1pbmUgYSBkZWNsYXJhdGlvbiAoZm9yIGV4YW1wbGUsIG9mIGEgY2xhc3Mgb3IgZnVuY3Rpb24pIGFuZCByZXR1cm4gbWV0YWRhdGEgYWJvdXQgYW55XG4gICAqIGRlY29yYXRvcnMgcHJlc2VudCBvbiB0aGUgZGVjbGFyYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSBkZWNsYXJhdGlvbiBhIFR5cGVTY3JpcHQgYHRzLkRlY2xhcmF0aW9uYCBub2RlIHJlcHJlc2VudGluZyB0aGUgY2xhc3Mgb3IgZnVuY3Rpb24gb3ZlclxuICAgKiB3aGljaCB0byByZWZsZWN0LiBGb3IgZXhhbXBsZSwgaWYgdGhlIGludGVudCBpcyB0byByZWZsZWN0IHRoZSBkZWNvcmF0b3JzIG9mIGEgY2xhc3MgYW5kIHRoZVxuICAgKiBzb3VyY2UgaXMgaW4gRVM2IGZvcm1hdCwgdGhpcyB3aWxsIGJlIGEgYHRzLkNsYXNzRGVjbGFyYXRpb25gIG5vZGUuIElmIHRoZSBzb3VyY2UgaXMgaW4gRVM1XG4gICAqIGZvcm1hdCwgdGhpcyBtaWdodCBiZSBhIGB0cy5WYXJpYWJsZURlY2xhcmF0aW9uYCBhcyBjbGFzc2VzIGluIEVTNSBhcmUgcmVwcmVzZW50ZWQgYXMgdGhlXG4gICAqIHJlc3VsdCBvZiBhbiBJSUZFIGV4ZWN1dGlvbi5cbiAgICpcbiAgICogQHJldHVybnMgYW4gYXJyYXkgb2YgYERlY29yYXRvcmAgbWV0YWRhdGEgaWYgZGVjb3JhdG9ycyBhcmUgcHJlc2VudCBvbiB0aGUgZGVjbGFyYXRpb24sIG9yXG4gICAqIGBudWxsYCBpZiBlaXRoZXIgbm8gZGVjb3JhdG9ycyB3ZXJlIHByZXNlbnQgb3IgaWYgdGhlIGRlY2xhcmF0aW9uIGlzIG5vdCBvZiBhIGRlY29yYXRhYmxlIHR5cGUuXG4gICAqL1xuICBnZXREZWNvcmF0b3JzT2ZEZWNsYXJhdGlvbihkZWNsYXJhdGlvbjogRGVjbGFyYXRpb25Ob2RlKTogRGVjb3JhdG9yW118bnVsbDtcblxuICAvKipcbiAgICogRXhhbWluZSBhIGRlY2xhcmF0aW9uIHdoaWNoIHNob3VsZCBiZSBvZiBhIGNsYXNzLCBhbmQgcmV0dXJuIG1ldGFkYXRhIGFib3V0IHRoZSBtZW1iZXJzIG9mIHRoZVxuICAgKiBjbGFzcy5cbiAgICpcbiAgICogQHBhcmFtIGNsYXp6IGEgYENsYXNzRGVjbGFyYXRpb25gIHJlcHJlc2VudGluZyB0aGUgY2xhc3Mgb3ZlciB3aGljaCB0byByZWZsZWN0LlxuICAgKlxuICAgKiBAcmV0dXJucyBhbiBhcnJheSBvZiBgQ2xhc3NNZW1iZXJgIG1ldGFkYXRhIHJlcHJlc2VudGluZyB0aGUgbWVtYmVycyBvZiB0aGUgY2xhc3MuXG4gICAqXG4gICAqIEB0aHJvd3MgaWYgYGRlY2xhcmF0aW9uYCBkb2VzIG5vdCByZXNvbHZlIHRvIGEgY2xhc3MgZGVjbGFyYXRpb24uXG4gICAqL1xuICBnZXRNZW1iZXJzT2ZDbGFzcyhjbGF6ejogQ2xhc3NEZWNsYXJhdGlvbik6IENsYXNzTWVtYmVyW107XG5cbiAgLyoqXG4gICAqIFJlZmxlY3Qgb3ZlciB0aGUgY29uc3RydWN0b3Igb2YgYSBjbGFzcyBhbmQgcmV0dXJuIG1ldGFkYXRhIGFib3V0IGl0cyBwYXJhbWV0ZXJzLlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBvbmx5IGxvb2tzIGF0IHRoZSBjb25zdHJ1Y3RvciBvZiBhIGNsYXNzIGRpcmVjdGx5IGFuZCBub3QgYXQgYW55IGluaGVyaXRlZFxuICAgKiBjb25zdHJ1Y3RvcnMuXG4gICAqXG4gICAqIEBwYXJhbSBjbGF6eiBhIGBDbGFzc0RlY2xhcmF0aW9uYCByZXByZXNlbnRpbmcgdGhlIGNsYXNzIG92ZXIgd2hpY2ggdG8gcmVmbGVjdC5cbiAgICpcbiAgICogQHJldHVybnMgYW4gYXJyYXkgb2YgYFBhcmFtZXRlcmAgbWV0YWRhdGEgcmVwcmVzZW50aW5nIHRoZSBwYXJhbWV0ZXJzIG9mIHRoZSBjb25zdHJ1Y3RvciwgaWZcbiAgICogYSBjb25zdHJ1Y3RvciBleGlzdHMuIElmIHRoZSBjb25zdHJ1Y3RvciBleGlzdHMgYW5kIGhhcyAwIHBhcmFtZXRlcnMsIHRoaXMgYXJyYXkgd2lsbCBiZSBlbXB0eS5cbiAgICogSWYgdGhlIGNsYXNzIGhhcyBubyBjb25zdHJ1Y3RvciwgdGhpcyBtZXRob2QgcmV0dXJucyBgbnVsbGAuXG4gICAqL1xuICBnZXRDb25zdHJ1Y3RvclBhcmFtZXRlcnMoY2xheno6IENsYXNzRGVjbGFyYXRpb24pOiBDdG9yUGFyYW1ldGVyW118bnVsbDtcblxuICAvKipcbiAgICogUmVmbGVjdCBvdmVyIGEgZnVuY3Rpb24gYW5kIHJldHVybiBtZXRhZGF0YSBhYm91dCBpdHMgcGFyYW1ldGVycyBhbmQgYm9keS5cbiAgICpcbiAgICogRnVuY3Rpb25zIGluIFR5cGVTY3JpcHQgYW5kIEVTNSBjb2RlIGhhdmUgZGlmZmVyZW50IEFTVCByZXByZXNlbnRhdGlvbnMsIGluIHBhcnRpY3VsYXIgYXJvdW5kXG4gICAqIGRlZmF1bHQgdmFsdWVzIGZvciBwYXJhbWV0ZXJzLiBBIFR5cGVTY3JpcHQgZnVuY3Rpb24gaGFzIGl0cyBkZWZhdWx0IHZhbHVlIGFzIHRoZSBpbml0aWFsaXplclxuICAgKiBvbiB0aGUgcGFyYW1ldGVyIGRlY2xhcmF0aW9uLCB3aGVyZWFzIGFuIEVTNSBmdW5jdGlvbiBoYXMgaXRzIGRlZmF1bHQgdmFsdWUgc2V0IGluIGEgc3RhdGVtZW50XG4gICAqIG9mIHRoZSBmb3JtOlxuICAgKlxuICAgKiBpZiAocGFyYW0gPT09IHZvaWQgMCkgeyBwYXJhbSA9IDM7IH1cbiAgICpcbiAgICogVGhpcyBtZXRob2QgYWJzdHJhY3RzIG92ZXIgdGhlc2UgZGV0YWlscywgYW5kIGludGVycHJldHMgdGhlIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIGFuZCBib2R5IHRvXG4gICAqIGV4dHJhY3QgcGFyYW1ldGVyIGRlZmF1bHQgdmFsdWVzIGFuZCB0aGUgXCJyZWFsXCIgYm9keS5cbiAgICpcbiAgICogQSBjdXJyZW50IGxpbWl0YXRpb24gaXMgdGhhdCB0aGlzIG1ldGFkYXRhIGhhcyBubyByZXByZXNlbnRhdGlvbiBmb3Igc2hvcnRoYW5kIGFzc2lnbm1lbnQgb2ZcbiAgICogcGFyYW1ldGVyIG9iamVjdHMgaW4gdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZS5cbiAgICpcbiAgICogQHBhcmFtIGZuIGEgVHlwZVNjcmlwdCBgdHMuRGVjbGFyYXRpb25gIG5vZGUgcmVwcmVzZW50aW5nIHRoZSBmdW5jdGlvbiBvdmVyIHdoaWNoIHRvIHJlZmxlY3QuXG4gICAqXG4gICAqIEByZXR1cm5zIGEgYEZ1bmN0aW9uRGVmaW5pdGlvbmAgZ2l2aW5nIG1ldGFkYXRhIGFib3V0IHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uLlxuICAgKi9cbiAgZ2V0RGVmaW5pdGlvbk9mRnVuY3Rpb24oZm46IHRzLk5vZGUpOiBGdW5jdGlvbkRlZmluaXRpb258bnVsbDtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lIGlmIGFuIGlkZW50aWZpZXIgd2FzIGltcG9ydGVkIGZyb20gYW5vdGhlciBtb2R1bGUgYW5kIHJldHVybiBgSW1wb3J0YCBtZXRhZGF0YVxuICAgKiBkZXNjcmliaW5nIGl0cyBvcmlnaW4uXG4gICAqXG4gICAqIEBwYXJhbSBpZCBhIFR5cGVTY3JpcHQgYHRzLklkZW50aWZlcmAgdG8gcmVmbGVjdC5cbiAgICpcbiAgICogQHJldHVybnMgbWV0YWRhdGEgYWJvdXQgdGhlIGBJbXBvcnRgIGlmIHRoZSBpZGVudGlmaWVyIHdhcyBpbXBvcnRlZCBmcm9tIGFub3RoZXIgbW9kdWxlLCBvclxuICAgKiBgbnVsbGAgaWYgdGhlIGlkZW50aWZpZXIgZG9lc24ndCByZXNvbHZlIHRvIGFuIGltcG9ydCBidXQgaW5zdGVhZCBpcyBsb2NhbGx5IGRlZmluZWQuXG4gICAqL1xuICBnZXRJbXBvcnRPZklkZW50aWZpZXIoaWQ6IHRzLklkZW50aWZpZXIpOiBJbXBvcnR8bnVsbDtcblxuICAvKipcbiAgICogVHJhY2UgYW4gaWRlbnRpZmllciB0byBpdHMgZGVjbGFyYXRpb24sIGlmIHBvc3NpYmxlLlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBhdHRlbXB0cyB0byByZXNvbHZlIHRoZSBkZWNsYXJhdGlvbiBvZiB0aGUgZ2l2ZW4gaWRlbnRpZmllciwgdHJhY2luZyBiYWNrIHRocm91Z2hcbiAgICogaW1wb3J0cyBhbmQgcmUtZXhwb3J0cyB1bnRpbCB0aGUgb3JpZ2luYWwgZGVjbGFyYXRpb24gc3RhdGVtZW50IGlzIGZvdW5kLiBBIGBEZWNsYXJhdGlvbmBcbiAgICogb2JqZWN0IGlzIHJldHVybmVkIGlmIHRoZSBvcmlnaW5hbCBkZWNsYXJhdGlvbiBpcyBmb3VuZCwgb3IgYG51bGxgIGlzIHJldHVybmVkIG90aGVyd2lzZS5cbiAgICpcbiAgICogSWYgdGhlIGRlY2xhcmF0aW9uIGlzIGluIGEgZGlmZmVyZW50IG1vZHVsZSwgYW5kIHRoYXQgbW9kdWxlIGlzIGltcG9ydGVkIHZpYSBhbiBhYnNvbHV0ZSBwYXRoLFxuICAgKiB0aGlzIG1ldGhvZCBhbHNvIHJldHVybnMgdGhlIGFic29sdXRlIHBhdGggb2YgdGhlIGltcG9ydGVkIG1vZHVsZS4gRm9yIGV4YW1wbGUsIGlmIHRoZSBjb2RlIGlzOlxuICAgKlxuICAgKiBgYGBcbiAgICogaW1wb3J0IHtSb3V0ZXJNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuICAgKlxuICAgKiBleHBvcnQgY29uc3QgUk9VVEVTID0gUm91dGVyTW9kdWxlLmZvclJvb3QoWy4uLl0pO1xuICAgKiBgYGBcbiAgICpcbiAgICogYW5kIGlmIGBnZXREZWNsYXJhdGlvbk9mSWRlbnRpZmllcmAgaXMgY2FsbGVkIG9uIGBSb3V0ZXJNb2R1bGVgIGluIHRoZSBgUk9VVEVTYCBleHByZXNzaW9uLFxuICAgKiB0aGVuIGl0IHdvdWxkIHRyYWNlIGBSb3V0ZXJNb2R1bGVgIHZpYSBpdHMgaW1wb3J0IGZyb20gYEBhbmd1bGFyL2NvcmVgLCBhbmQgbm90ZSB0aGF0IHRoZVxuICAgKiBkZWZpbml0aW9uIHdhcyBpbXBvcnRlZCBmcm9tIGBAYW5ndWxhci9jb3JlYCBpbnRvIHRoZSBhcHBsaWNhdGlvbiB3aGVyZSBpdCB3YXMgcmVmZXJlbmNlZC5cbiAgICpcbiAgICogSWYgdGhlIGRlZmluaXRpb24gaXMgcmUtZXhwb3J0ZWQgc2V2ZXJhbCB0aW1lcyBmcm9tIGRpZmZlcmVudCBhYnNvbHV0ZSBtb2R1bGUgbmFtZXMsIG9ubHlcbiAgICogdGhlIGZpcnN0IG9uZSAodGhlIG9uZSBieSB3aGljaCB0aGUgYXBwbGljYXRpb24gcmVmZXJzIHRvIHRoZSBtb2R1bGUpIGlzIHJldHVybmVkLlxuICAgKlxuICAgKiBUaGlzIG1vZHVsZSBuYW1lIGlzIHJldHVybmVkIGluIHRoZSBgdmlhTW9kdWxlYCBmaWVsZCBvZiB0aGUgYERlY2xhcmF0aW9uYC4gSWYgVGhlIGRlY2xhcmF0aW9uXG4gICAqIGlzIHJlbGF0aXZlIHRvIHRoZSBhcHBsaWNhdGlvbiBpdHNlbGYgYW5kIHRoZXJlIHdhcyBubyBpbXBvcnQgdGhyb3VnaCBhbiBhYnNvbHV0ZSBwYXRoLCB0aGVuXG4gICAqIGB2aWFNb2R1bGVgIGlzIGBudWxsYC5cbiAgICpcbiAgICogQHBhcmFtIGlkIGEgVHlwZVNjcmlwdCBgdHMuSWRlbnRpZmllcmAgdG8gdHJhY2UgYmFjayB0byBhIGRlY2xhcmF0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyBtZXRhZGF0YSBhYm91dCB0aGUgYERlY2xhcmF0aW9uYCBpZiB0aGUgb3JpZ2luYWwgZGVjbGFyYXRpb24gaXMgZm91bmQsIG9yIGBudWxsYFxuICAgKiBvdGhlcndpc2UuXG4gICAqL1xuICBnZXREZWNsYXJhdGlvbk9mSWRlbnRpZmllcihpZDogdHMuSWRlbnRpZmllcik6IERlY2xhcmF0aW9ufG51bGw7XG5cbiAgLyoqXG4gICAqIENvbGxlY3QgdGhlIGRlY2xhcmF0aW9ucyBleHBvcnRlZCBmcm9tIGEgbW9kdWxlIGJ5IG5hbWUuXG4gICAqXG4gICAqIEl0ZXJhdGVzIG92ZXIgdGhlIGV4cG9ydHMgb2YgYSBtb2R1bGUgKGluY2x1ZGluZyByZS1leHBvcnRzKSBhbmQgcmV0dXJucyBhIG1hcCBvZiBleHBvcnRcbiAgICogbmFtZSB0byBpdHMgYERlY2xhcmF0aW9uYC4gSWYgYW4gZXhwb3J0ZWQgdmFsdWUgaXMgaXRzZWxmIHJlLWV4cG9ydGVkIGZyb20gYW5vdGhlciBtb2R1bGUsXG4gICAqIHRoZSBgRGVjbGFyYXRpb25gJ3MgYHZpYU1vZHVsZWAgd2lsbCByZWZsZWN0IHRoYXQuXG4gICAqXG4gICAqIEBwYXJhbSBub2RlIGEgVHlwZVNjcmlwdCBgdHMuTm9kZWAgcmVwcmVzZW50aW5nIHRoZSBtb2R1bGUgKGZvciBleGFtcGxlIGEgYHRzLlNvdXJjZUZpbGVgKSBmb3JcbiAgICogd2hpY2ggdG8gY29sbGVjdCBleHBvcnRzLlxuICAgKlxuICAgKiBAcmV0dXJucyBhIG1hcCBvZiBgRGVjbGFyYXRpb25gcyBmb3IgdGhlIG1vZHVsZSdzIGV4cG9ydHMsIGJ5IG5hbWUuXG4gICAqL1xuICBnZXRFeHBvcnRzT2ZNb2R1bGUobW9kdWxlOiB0cy5Ob2RlKTogTWFwPHN0cmluZywgRGVjbGFyYXRpb24+fG51bGw7XG5cbiAgLyoqXG4gICAqIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIG5vZGUgYWN0dWFsbHkgcmVwcmVzZW50cyBhIGNsYXNzLlxuICAgKi9cbiAgaXNDbGFzcyhub2RlOiB0cy5Ob2RlKTogbm9kZSBpcyBDbGFzc0RlY2xhcmF0aW9uO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGdpdmVuIGRlY2xhcmF0aW9uLCB3aGljaCBzaG91bGQgYmUgYSBjbGFzcywgaGFzIGEgYmFzZSBjbGFzcy5cbiAgICpcbiAgICogQHBhcmFtIGNsYXp6IGEgYENsYXNzRGVjbGFyYXRpb25gIHJlcHJlc2VudGluZyB0aGUgY2xhc3Mgb3ZlciB3aGljaCB0byByZWZsZWN0LlxuICAgKi9cbiAgaGFzQmFzZUNsYXNzKGNsYXp6OiBDbGFzc0RlY2xhcmF0aW9uKTogYm9vbGVhbjtcblxuICAvKipcbiAgICogR2V0IGFuIGV4cHJlc3Npb24gcmVwcmVzZW50aW5nIHRoZSBiYXNlIGNsYXNzIChpZiBhbnkpIG9mIHRoZSBnaXZlbiBgY2xhenpgLlxuICAgKlxuICAgKiBUaGlzIGV4cHJlc3Npb24gaXMgbW9zdCBjb21tb25seSBhbiBJZGVudGlmaWVyLCBidXQgaXMgcG9zc2libGUgdG8gaW5oZXJpdCBmcm9tIGEgbW9yZSBkeW5hbWljXG4gICAqIGV4cHJlc3Npb24uXG4gICAqXG4gICAqIEBwYXJhbSBjbGF6eiB0aGUgY2xhc3Mgd2hvc2UgYmFzZSB3ZSB3YW50IHRvIGdldC5cbiAgICovXG4gIGdldEJhc2VDbGFzc0V4cHJlc3Npb24oY2xheno6IENsYXNzRGVjbGFyYXRpb24pOiB0cy5FeHByZXNzaW9ufG51bGw7XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbnVtYmVyIG9mIGdlbmVyaWMgdHlwZSBwYXJhbWV0ZXJzIG9mIGEgZ2l2ZW4gY2xhc3MuXG4gICAqXG4gICAqIEBwYXJhbSBjbGF6eiBhIGBDbGFzc0RlY2xhcmF0aW9uYCByZXByZXNlbnRpbmcgdGhlIGNsYXNzIG92ZXIgd2hpY2ggdG8gcmVmbGVjdC5cbiAgICpcbiAgICogQHJldHVybnMgdGhlIG51bWJlciBvZiB0eXBlIHBhcmFtZXRlcnMgb2YgdGhlIGNsYXNzLCBpZiBrbm93biwgb3IgYG51bGxgIGlmIHRoZSBkZWNsYXJhdGlvblxuICAgKiBpcyBub3QgYSBjbGFzcyBvciBoYXMgYW4gdW5rbm93biBudW1iZXIgb2YgdHlwZSBwYXJhbWV0ZXJzLlxuICAgKi9cbiAgZ2V0R2VuZXJpY0FyaXR5T2ZDbGFzcyhjbGF6ejogQ2xhc3NEZWNsYXJhdGlvbik6IG51bWJlcnxudWxsO1xuXG4gIC8qKlxuICAgKiBGaW5kIHRoZSBhc3NpZ25lZCB2YWx1ZSBvZiBhIHZhcmlhYmxlIGRlY2xhcmF0aW9uLlxuICAgKlxuICAgKiBOb3JtYWxseSB0aGlzIHdpbGwgYmUgdGhlIGluaXRpYWxpemVyIG9mIHRoZSBkZWNsYXJhdGlvbiwgYnV0IHdoZXJlIHRoZSB2YXJpYWJsZSBpc1xuICAgKiBub3QgYSBgY29uc3RgIHdlIG1heSBuZWVkIHRvIGxvb2sgZWxzZXdoZXJlIGZvciB0aGUgdmFyaWFibGUncyB2YWx1ZS5cbiAgICpcbiAgICogQHBhcmFtIGRlY2xhcmF0aW9uIGEgVHlwZVNjcmlwdCB2YXJpYWJsZSBkZWNsYXJhdGlvbiwgd2hvc2UgdmFsdWUgd2Ugd2FudC5cbiAgICogQHJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSB2YXJpYWJsZSwgYXMgYSBUeXBlU2NyaXB0IGV4cHJlc3Npb24gbm9kZSwgb3IgYHVuZGVmaW5lZGBcbiAgICogaWYgdGhlIHZhbHVlIGNhbm5vdCBiZSBjb21wdXRlZC5cbiAgICovXG4gIGdldFZhcmlhYmxlVmFsdWUoZGVjbGFyYXRpb246IHRzLlZhcmlhYmxlRGVjbGFyYXRpb24pOiB0cy5FeHByZXNzaW9ufG51bGw7XG5cbiAgLyoqXG4gICAqIFRha2UgYW4gZXhwb3J0ZWQgZGVjbGFyYXRpb24gKG1heWJlIGEgY2xhc3MgZG93bi1sZXZlbGVkIHRvIGEgdmFyaWFibGUpIGFuZCBsb29rIHVwIHRoZVxuICAgKiBkZWNsYXJhdGlvbiBvZiBpdHMgdHlwZSBpbiBhIHNlcGFyYXRlIC5kLnRzIHRyZWUuXG4gICAqXG4gICAqIFRoaXMgZnVuY3Rpb24gaXMgYWxsb3dlZCB0byByZXR1cm4gYG51bGxgIGlmIHRoZSBjdXJyZW50IGNvbXBpbGF0aW9uIHVuaXQgZG9lcyBub3QgaGF2ZSBhXG4gICAqIHNlcGFyYXRlIC5kLnRzIHRyZWUuIFdoZW4gY29tcGlsaW5nIFR5cGVTY3JpcHQgY29kZSB0aGlzIGlzIGFsd2F5cyB0aGUgY2FzZSwgc2luY2UgLmQudHMgZmlsZXNcbiAgICogYXJlIHByb2R1Y2VkIG9ubHkgZHVyaW5nIHRoZSBlbWl0IG9mIHN1Y2ggYSBjb21waWxhdGlvbi4gV2hlbiBjb21waWxpbmcgLmpzIGNvZGUsIGhvd2V2ZXIsXG4gICAqIHRoZXJlIGlzIGZyZXF1ZW50bHkgYSBwYXJhbGxlbCAuZC50cyB0cmVlIHdoaWNoIHRoaXMgbWV0aG9kIGV4cG9zZXMuXG4gICAqXG4gICAqIE5vdGUgdGhhdCB0aGUgYHRzLkRlY2xhcmF0aW9uYCByZXR1cm5lZCBmcm9tIHRoaXMgZnVuY3Rpb24gbWF5IG5vdCBiZSBmcm9tIHRoZSBzYW1lXG4gICAqIGB0cy5Qcm9ncmFtYCBhcyB0aGUgaW5wdXQgZGVjbGFyYXRpb24uXG4gICAqL1xuICBnZXREdHNEZWNsYXJhdGlvbihkZWNsYXJhdGlvbjogRGVjbGFyYXRpb25Ob2RlKTogdHMuRGVjbGFyYXRpb258bnVsbDtcblxuICAvKipcbiAgICogR2V0IGEgYHRzLklkZW50aWZpZXJgIGZvciBhIGdpdmVuIGBDbGFzc0RlY2xhcmF0aW9uYCB3aGljaCBjYW4gYmUgdXNlZCB0byByZWZlciB0byB0aGUgY2xhc3NcbiAgICogd2l0aGluIGl0cyBkZWZpbml0aW9uIChzdWNoIGFzIGluIHN0YXRpYyBmaWVsZHMpLlxuICAgKlxuICAgKiBUaGlzIGNhbiBkaWZmZXIgZnJvbSBgY2xhenoubmFtZWAgd2hlbiBuZ2NjIHJ1bnMgb3ZlciBFUzUgY29kZSwgc2luY2UgdGhlIGNsYXNzIG1heSBoYXZlIGFcbiAgICogZGlmZmVyZW50IG5hbWUgd2l0aGluIGl0cyBJSUZFIHdyYXBwZXIgdGhhbiBpdCBkb2VzIGV4dGVybmFsbHkuXG4gICAqL1xuICBnZXRJbnRlcm5hbE5hbWVPZkNsYXNzKGNsYXp6OiBDbGFzc0RlY2xhcmF0aW9uKTogdHMuSWRlbnRpZmllcjtcblxuICAvKipcbiAgICogR2V0IGEgYHRzLklkZW50aWZpZXJgIGZvciBhIGdpdmVuIGBDbGFzc0RlY2xhcmF0aW9uYCB3aGljaCBjYW4gYmUgdXNlZCB0byByZWZlciB0byB0aGUgY2xhc3NcbiAgICogZnJvbSBzdGF0ZW1lbnRzIHRoYXQgYXJlIFwiYWRqYWNlbnRcIiwgYW5kIGNvbmNlcHR1YWxseSB0aWdodGx5IGJvdW5kLCB0byB0aGUgY2xhc3MgYnV0IG5vdFxuICAgKiBhY3R1YWxseSBpbnNpZGUgaXQuXG4gICAqXG4gICAqIFNpbWlsYXIgdG8gYGdldEludGVybmFsTmFtZU9mQ2xhc3MoKWAsIHRoaXMgbmFtZSBjYW4gZGlmZmVyIGZyb20gYGNsYXp6Lm5hbWVgIHdoZW4gbmdjYyBydW5zXG4gICAqIG92ZXIgRVM1IGNvZGUsIHNpbmNlIHRoZXNlIFwiYWRqYWNlbnRcIiBzdGF0ZW1lbnRzIG5lZWQgdG8gZXhpc3QgaW4gdGhlIElJRkUgd2hlcmUgdGhlIGNsYXNzIG1heVxuICAgKiBoYXZlIGEgZGlmZmVyZW50IG5hbWUgdGhhbiBpdCBkb2VzIGV4dGVybmFsbHkuXG4gICAqL1xuICBnZXRBZGphY2VudE5hbWVPZkNsYXNzKGNsYXp6OiBDbGFzc0RlY2xhcmF0aW9uKTogdHMuSWRlbnRpZmllcjtcblxuICAvKipcbiAgICogUmV0dXJucyBgdHJ1ZWAgaWYgYSBjbGFzcyBpcyBleHBvcnRlZCBmcm9tIHRoZSBtb2R1bGUgaW4gd2hpY2ggaXQncyBkZWZpbmVkLlxuICAgKlxuICAgKiBOb3QgYWxsIG1lY2hhbmlzbXMgYnkgd2hpY2ggYSBjbGFzcyBpcyBleHBvcnRlZCBjYW4gYmUgc3RhdGljYWxseSBkZXRlY3RlZCwgZXNwZWNpYWxseSB3aGVuXG4gICAqIHByb2Nlc3NpbmcgYWxyZWFkeSBjb21waWxlZCBKYXZhU2NyaXB0LiBBIGBmYWxzZWAgcmVzdWx0IGRvZXMgbm90IGluZGljYXRlIHRoYXQgdGhlIGNsYXNzIGlzXG4gICAqIG5ldmVyIHZpc2libGUgb3V0c2lkZSBpdHMgbW9kdWxlLCBvbmx5IHRoYXQgaXQgd2FzIG5vdCBleHBvcnRlZCB2aWEgb25lIG9mIHRoZSBleHBvcnRcbiAgICogbWVjaGFuaXNtcyB0aGF0IHRoZSBgUmVmbGVjdGlvbkhvc3RgIGlzIGNhcGFibGUgb2Ygc3RhdGljYWxseSBjaGVja2luZy5cbiAgICovXG4gIGlzU3RhdGljYWxseUV4cG9ydGVkKGNsYXp6OiBDbGFzc0RlY2xhcmF0aW9uKTogYm9vbGVhbjtcbn1cbiJdfQ==
88
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9zdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyLWNsaS9zcmMvbmd0c2MvcmVmbGVjdGlvbi9zcmMvaG9zdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7Ozs7SUFFSCwrQkFBaUM7SUFrRXBCLFFBQUEsU0FBUyxHQUFHO1FBQ3ZCLFlBQVksRUFBRSxVQUFDLFNBQW9CO1lBQ2pDLElBQUksU0FBUyxDQUFDLElBQUksS0FBSyxJQUFJLEVBQUU7Z0JBQzNCLE9BQU8sU0FBUyxDQUFDLElBQUksQ0FBQzthQUN2QjtpQkFBTTtnQkFDTCxrRUFBa0U7Z0JBQ2xFLE9BQVEsU0FBZ0MsQ0FBQyxjQUFjLENBQUM7YUFDekQ7UUFDSCxDQUFDO0tBQ0YsQ0FBQztJQVdGLFNBQWdCLHFCQUFxQixDQUFDLEdBQWtCO1FBQ3RELE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUM7WUFDdkIsRUFBRSxDQUFDLDBCQUEwQixDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQztnQkFDckUsRUFBRSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUpELHNEQUlDO0lBbUJEOztPQUVHO0lBQ0gsSUFBWSxlQU1YO0lBTkQsV0FBWSxlQUFlO1FBQ3pCLG1FQUFXLENBQUE7UUFDWCx5REFBTSxDQUFBO1FBQ04seURBQU0sQ0FBQTtRQUNOLDZEQUFRLENBQUE7UUFDUix5REFBTSxDQUFBO0lBQ1IsQ0FBQyxFQU5XLGVBQWUsR0FBZix1QkFBZSxLQUFmLHVCQUFlLFFBTTFCO0lBdVVEOztPQUVHO0lBQ0gsSUFBWSxnQkE4Qlg7SUE5QkQsV0FBWSxnQkFBZ0I7UUFDMUI7O1dBRUc7UUFDSCwyRUFBYyxDQUFBO1FBRWQ7O1dBRUc7UUFDSCwyRUFBYyxDQUFBO1FBRWQ7O1dBRUc7UUFDSCwyRUFBYyxDQUFBO1FBRWQ7O1dBRUc7UUFDSCx1RkFBb0IsQ0FBQTtRQUVwQjs7V0FFRztRQUNILHFGQUFtQixDQUFBO1FBRW5COztXQUVHO1FBQ0gsdUVBQVksQ0FBQTtJQUNkLENBQUMsRUE5QlcsZ0JBQWdCLEdBQWhCLHdCQUFnQixLQUFoQix3QkFBZ0IsUUE4QjNCO0lBMEdEOzs7T0FHRztJQUNILFNBQWdCLHFCQUFxQixDQUFDLElBQWlCO1FBQ3JELE9BQU8sSUFBSSxDQUFDLElBQUkscUJBQTZCLENBQUM7SUFDaEQsQ0FBQztJQUZELHNEQUVDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCAqIGFzIHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuXG4vKipcbiAqIE1ldGFkYXRhIGV4dHJhY3RlZCBmcm9tIGFuIGluc3RhbmNlIG9mIGEgZGVjb3JhdG9yIG9uIGFub3RoZXIgZGVjbGFyYXRpb24sIG9yIHN5bnRoZXNpemVkIGZyb21cbiAqIG90aGVyIGluZm9ybWF0aW9uIGFib3V0IGEgY2xhc3MuXG4gKi9cbmV4cG9ydCB0eXBlIERlY29yYXRvciA9IENvbmNyZXRlRGVjb3JhdG9yfFN5bnRoZXRpY0RlY29yYXRvcjtcblxuZXhwb3J0IGludGVyZmFjZSBCYXNlRGVjb3JhdG9yIHtcbiAgLyoqXG4gICAqIE5hbWUgYnkgd2hpY2ggdGhlIGRlY29yYXRvciB3YXMgaW52b2tlZCBpbiB0aGUgdXNlcidzIGNvZGUuXG4gICAqXG4gICAqIFRoaXMgaXMgZGlzdGluY3QgZnJvbSB0aGUgbmFtZSBieSB3aGljaCB0aGUgZGVjb3JhdG9yIHdhcyBpbXBvcnRlZCAodGhvdWdoIGluIHByYWN0aWNlIHRoZXlcbiAgICogd2lsbCB1c3VhbGx5IGJlIHRoZSBzYW1lKS5cbiAgICovXG4gIG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogSWRlbnRpZmllciB3aGljaCByZWZlcnMgdG8gdGhlIGRlY29yYXRvciBpbiB0aGUgdXNlcidzIGNvZGUuXG4gICAqL1xuICBpZGVudGlmaWVyOiBEZWNvcmF0b3JJZGVudGlmaWVyfG51bGw7XG5cbi8qKlxuICogYEltcG9ydGAgYnkgd2hpY2ggdGhlIGRlY29yYXRvciB3YXMgYnJvdWdodCBpbnRvIHRoZSBtb2R1bGUgaW4gd2hpY2ggaXQgd2FzIGludm9rZWQsIG9yIGBudWxsYFxuICogaWYgdGhlIGRlY29yYXRvciB3YXMgZGVjbGFyZWQgaW4gdGhlIHNhbWUgbW9kdWxlIGFuZCBub3QgaW1wb3J0ZWQuXG4gKi9cbmltcG9ydDogSW1wb3J0fG51bGw7XG5cbiAgLyoqXG4gICAqIFR5cGVTY3JpcHQgcmVmZXJlbmNlIHRvIHRoZSBkZWNvcmF0b3IgaXRzZWxmLCBvciBgbnVsbGAgaWYgdGhlIGRlY29yYXRvciBpcyBzeW50aGVzaXplZCAoZS5nLlxuICAgKiBpbiBuZ2NjKS5cbiAgICovXG4gIG5vZGU6IHRzLk5vZGV8bnVsbDtcblxuICAvKipcbiAgICogQXJndW1lbnRzIG9mIHRoZSBpbnZvY2F0aW9uIG9mIHRoZSBkZWNvcmF0b3IsIGlmIHRoZSBkZWNvcmF0b3IgaXMgaW52b2tlZCwgb3IgYG51bGxgXG4gICAqIG90aGVyd2lzZS5cbiAgICovXG4gIGFyZ3M6IHRzLkV4cHJlc3Npb25bXXxudWxsO1xufVxuXG4vKipcbiAqIE1ldGFkYXRhIGV4dHJhY3RlZCBmcm9tIGFuIGluc3RhbmNlIG9mIGEgZGVjb3JhdG9yIG9uIGFub3RoZXIgZGVjbGFyYXRpb24sIHdoaWNoIHdhcyBhY3R1YWxseVxuICogcHJlc2VudCBpbiBhIGZpbGUuXG4gKlxuICogQ29uY3JldGUgZGVjb3JhdG9ycyBhbHdheXMgaGF2ZSBhbiBgaWRlbnRpZmllcmAgYW5kIGEgYG5vZGVgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbmNyZXRlRGVjb3JhdG9yIGV4dGVuZHMgQmFzZURlY29yYXRvciB7XG4gIGlkZW50aWZpZXI6IERlY29yYXRvcklkZW50aWZpZXI7XG4gIG5vZGU6IHRzLk5vZGU7XG59XG5cbi8qKlxuICogU3ludGhldGljIGRlY29yYXRvcnMgbmV2ZXIgaGF2ZSBhbiBgaWRlbnRpZmllcmAgb3IgYSBgbm9kZWAsIGJ1dCBrbm93IHRoZSBub2RlIGZvciB3aGljaCB0aGV5XG4gKiB3ZXJlIHN5bnRoZXNpemVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN5bnRoZXRpY0RlY29yYXRvciBleHRlbmRzIEJhc2VEZWNvcmF0b3Ige1xuICBpZGVudGlmaWVyOiBudWxsO1xuICBub2RlOiBudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgYHRzLk5vZGVgIGZvciB3aGljaCB0aGlzIGRlY29yYXRvciB3YXMgY3JlYXRlZC5cbiAgICovXG4gIHN5bnRoZXNpemVkRm9yOiB0cy5Ob2RlO1xufVxuXG5leHBvcnQgY29uc3QgRGVjb3JhdG9yID0ge1xuICBub2RlRm9yRXJyb3I6IChkZWNvcmF0b3I6IERlY29yYXRvcik6IHRzLk5vZGUgPT4ge1xuICAgIGlmIChkZWNvcmF0b3Iubm9kZSAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGRlY29yYXRvci5ub2RlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUT0RPKGFseGh1Yik6IHdlIGNhbid0IHJlbHkgb24gbmFycm93aW5nIHVudGlsIFRTIDMuNiBpcyBpbiBnMy5cbiAgICAgIHJldHVybiAoZGVjb3JhdG9yIGFzIFN5bnRoZXRpY0RlY29yYXRvcikuc3ludGhlc2l6ZWRGb3I7XG4gICAgfVxuICB9LFxufTtcblxuLyoqXG4gKiBBIGRlY29yYXRvciBpcyBpZGVudGlmaWVkIGJ5IGVpdGhlciBhIHNpbXBsZSBpZGVudGlmaWVyIChlLmcuIGBEZWNvcmF0b3JgKSBvciwgaW4gc29tZSBjYXNlcyxcbiAqIGEgbmFtZXNwYWNlZCBwcm9wZXJ0eSBhY2Nlc3MgKGUuZy4gYGNvcmUuRGVjb3JhdG9yYCkuXG4gKi9cbmV4cG9ydCB0eXBlIERlY29yYXRvcklkZW50aWZpZXIgPSB0cy5JZGVudGlmaWVyfE5hbWVzcGFjZWRJZGVudGlmaWVyO1xuZXhwb3J0IHR5cGUgTmFtZXNwYWNlZElkZW50aWZpZXIgPSB0cy5Qcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24me1xuICBleHByZXNzaW9uOiB0cy5JZGVudGlmaWVyO1xuICBuYW1lOiB0cy5JZGVudGlmaWVyXG59O1xuZXhwb3J0IGZ1bmN0aW9uIGlzRGVjb3JhdG9ySWRlbnRpZmllcihleHA6IHRzLkV4cHJlc3Npb24pOiBleHAgaXMgRGVjb3JhdG9ySWRlbnRpZmllciB7XG4gIHJldHVybiB0cy5pc0lkZW50aWZpZXIoZXhwKSB8fFxuICAgICAgdHMuaXNQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24oZXhwKSAmJiB0cy5pc0lkZW50aWZpZXIoZXhwLmV4cHJlc3Npb24pICYmXG4gICAgICB0cy5pc0lkZW50aWZpZXIoZXhwLm5hbWUpO1xufVxuXG4vKipcbiAqIFRoZSBgdHMuRGVjbGFyYXRpb25gIG9mIGEgXCJjbGFzc1wiLlxuICpcbiAqIENsYXNzZXMgYXJlIHJlcHJlc2VudGVkIGRpZmZlcmVudGx5IGluIGRpZmZlcmVudCBjb2RlIGZvcm1hdHM6XG4gKiAtIEluIFRTIGNvZGUsIHRoZXkgYXJlIHR5cGljYWxseSBkZWZpbmVkIHVzaW5nIHRoZSBgY2xhc3NgIGtleXdvcmQuXG4gKiAtIEluIEVTMjAxNSBjb2RlLCB0aGV5IGFyZSB1c3VhbGx5IGRlZmluZWQgdXNpbmcgdGhlIGBjbGFzc2Aga2V5d29yZCwgYnV0IHRoZXkgY2FuIGFsc28gYmVcbiAqICAgdmFyaWFibGUgZGVjbGFyYXRpb25zLCB3aGljaCBhcmUgaW5pdGlhbGl6ZWQgdG8gYSBjbGFzcyBleHByZXNzaW9uIChlLmcuXG4gKiAgIGBsZXQgRm9vID0gRm9vMSA9IGNsYXNzIEZvbyB7fWApLlxuICogLSBJbiBFUzUgY29kZSwgdGhleSBhcmUgdHlwaWNhbGx5IGRlZmluZWQgYXMgdmFyaWFibGUgZGVjbGFyYXRpb25zIGJlaW5nIGFzc2lnbmVkIHRoZSByZXR1cm5cbiAqICAgdmFsdWUgb2YgYW4gSUlGRS4gVGhlIGFjdHVhbCBcImNsYXNzXCIgaXMgaW1wbGVtZW50ZWQgYXMgYSBjb25zdHJ1Y3RvciBmdW5jdGlvbiBpbnNpZGUgdGhlIElJRkUsXG4gKiAgIGJ1dCB0aGUgb3V0ZXIgdmFyaWFibGUgZGVjbGFyYXRpb24gcmVwcmVzZW50cyB0aGUgXCJjbGFzc1wiIHRvIHRoZSByZXN0IG9mIHRoZSBwcm9ncmFtLlxuICpcbiAqIEZvciBgUmVmbGVjdGlvbkhvc3RgIHB1cnBvc2VzLCBhIGNsYXNzIGRlY2xhcmF0aW9uIHNob3VsZCBhbHdheXMgaGF2ZSBhIGBuYW1lYCBpZGVudGlmaWVyLFxuICogYmVjYXVzZSB3ZSBuZWVkIHRvIGJlIGFibGUgdG8gcmVmZXJlbmNlIGl0IGluIG90aGVyIHBhcnRzIG9mIHRoZSBwcm9ncmFtLlxuICovXG5leHBvcnQgdHlwZSBDbGFzc0RlY2xhcmF0aW9uPFQgZXh0ZW5kcyBEZWNsYXJhdGlvbk5vZGUgPSBEZWNsYXJhdGlvbk5vZGU+ID0gVCZ7bmFtZTogdHMuSWRlbnRpZmllcn07XG5cbi8qKlxuICogQW4gZW51bWVyYXRpb24gb2YgcG9zc2libGUga2luZHMgb2YgY2xhc3MgbWVtYmVycy5cbiAqL1xuZXhwb3J0IGVudW0gQ2xhc3NNZW1iZXJLaW5kIHtcbiAgQ29uc3RydWN0b3IsXG4gIEdldHRlcixcbiAgU2V0dGVyLFxuICBQcm9wZXJ0eSxcbiAgTWV0aG9kLFxufVxuXG4vKipcbiAqIEEgbWVtYmVyIG9mIGEgY2xhc3MsIHN1Y2ggYXMgYSBwcm9wZXJ0eSwgbWV0aG9kLCBvciBjb25zdHJ1Y3Rvci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDbGFzc01lbWJlciB7XG4gIC8qKlxuICAgKiBUeXBlU2NyaXB0IHJlZmVyZW5jZSB0byB0aGUgY2xhc3MgbWVtYmVyIGl0c2VsZiwgb3IgbnVsbCBpZiBpdCBpcyBub3QgYXBwbGljYWJsZS5cbiAgICovXG4gIG5vZGU6IHRzLk5vZGV8bnVsbDtcblxuICAvKipcbiAgICogSW5kaWNhdGlvbiBvZiB3aGljaCB0eXBlIG9mIG1lbWJlciB0aGlzIGlzIChwcm9wZXJ0eSwgbWV0aG9kLCBldGMpLlxuICAgKi9cbiAga2luZDogQ2xhc3NNZW1iZXJLaW5kO1xuXG4gIC8qKlxuICAgKiBUeXBlU2NyaXB0IGB0cy5UeXBlTm9kZWAgcmVwcmVzZW50aW5nIHRoZSB0eXBlIG9mIHRoZSBtZW1iZXIsIG9yIGBudWxsYCBpZiBub3QgcHJlc2VudCBvclxuICAgKiBhcHBsaWNhYmxlLlxuICAgKi9cbiAgdHlwZTogdHMuVHlwZU5vZGV8bnVsbDtcblxuICAvKipcbiAgICogTmFtZSBvZiB0aGUgY2xhc3MgbWVtYmVyLlxuICAgKi9cbiAgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUeXBlU2NyaXB0IGB0cy5JZGVudGlmaWVyYCBvciBgdHMuU3RyaW5nTGl0ZXJhbGAgcmVwcmVzZW50aW5nIHRoZSBuYW1lIG9mIHRoZSBtZW1iZXIsIG9yIGBudWxsYFxuICAgKiBpZiBubyBzdWNoIG5vZGUgaXMgcHJlc2VudC5cbiAgICpcbiAgICogVGhlIGBuYW1lTm9kZWAgaXMgdXNlZnVsIGluIHdyaXRpbmcgcmVmZXJlbmNlcyB0byB0aGlzIG1lbWJlciB0aGF0IHdpbGwgYmUgY29ycmVjdGx5IHNvdXJjZS1cbiAgICogbWFwcGVkIGJhY2sgdG8gdGhlIG9yaWdpbmFsIGZpbGUuXG4gICAqL1xuICBuYW1lTm9kZTogdHMuSWRlbnRpZmllcnx0cy5TdHJpbmdMaXRlcmFsfG51bGw7XG5cbiAgLyoqXG4gICAqIFR5cGVTY3JpcHQgYHRzLkV4cHJlc3Npb25gIHdoaWNoIHJlcHJlc2VudHMgdGhlIHZhbHVlIG9mIHRoZSBtZW1iZXIuXG4gICAqXG4gICAqIElmIHRoZSBtZW1iZXIgaXMgYSBwcm9wZXJ0eSwgdGhpcyB3aWxsIGJlIHRoZSBwcm9wZXJ0eSBpbml0aWFsaXplciBpZiB0aGVyZSBpcyBvbmUsIG9yIG51bGxcbiAgICogb3RoZXJ3aXNlLlxuICAgKi9cbiAgdmFsdWU6IHRzLkV4cHJlc3Npb258bnVsbDtcblxuICAvKipcbiAgICogVHlwZVNjcmlwdCBgdHMuRGVjbGFyYXRpb25gIHdoaWNoIHJlcHJlc2VudHMgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBtZW1iZXIuXG4gICAqXG4gICAqIEluIFR5cGVTY3JpcHQgY29kZSB0aGlzIGlzIGlkZW50aWNhbCB0byB0aGUgbm9kZSwgYnV0IGluIGRvd25sZXZlbGVkIGNvZGUgdGhpcyBzaG91bGQgYWx3YXlzIGJlXG4gICAqIHRoZSBEZWNsYXJhdGlvbiB3aGljaCBhY3R1YWxseSByZXByZXNlbnRzIHRoZSBtZW1iZXIncyBydW50aW1lIHZhbHVlLlxuICAgKlxuICAgKiBGb3IgZXhhbXBsZSwgdGhlIFRTIGNvZGU6XG4gICAqXG4gICAqIGBgYFxuICAgKiBjbGFzcyBDbGF6eiB7XG4gICAqICAgc3RhdGljIGdldCBwcm9wZXJ0eSgpOiBzdHJpbmcge1xuICAgKiAgICAgcmV0dXJuICd2YWx1ZSc7XG4gICAqICAgfVxuICAgKiB9XG4gICAqIGBgYFxuICAgKlxuICAgKiBEb3dubGV2ZWxzIHRvOlxuICAgKlxuICAgKiBgYGBcbiAgICogdmFyIENsYXp6ID0gKGZ1bmN0aW9uICgpIHtcbiAgICogICBmdW5jdGlvbiBDbGF6eigpIHtcbiAgICogICB9XG4gICAqICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENsYXp6LCBcInByb3BlcnR5XCIsIHtcbiAgICogICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAqICAgICAgICAgICByZXR1cm4gJ3ZhbHVlJztcbiAgICogICAgICAgfSxcbiAgICogICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICogICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAqICAgfSk7XG4gICAqICAgcmV0dXJuIENsYXp6O1xuICAgKiB9KCkpO1xuICAgKiBgYGBcbiAgICpcbiAgICogSW4gdGhpcyBleGFtcGxlLCBmb3IgdGhlIHByb3BlcnR5IFwicHJvcGVydHlcIiwgdGhlIG5vZGUgd291bGQgYmUgdGhlIGVudGlyZVxuICAgKiBPYmplY3QuZGVmaW5lUHJvcGVydHkgRXhwcmVzc2lvblN0YXRlbWVudCwgYnV0IHRoZSBpbXBsZW1lbnRhdGlvbiB3b3VsZCBiZSB0aGlzXG4gICAqIEZ1bmN0aW9uRGVjbGFyYXRpb246XG4gICAqXG4gICAqIGBgYFxuICAgKiBmdW5jdGlvbiAoKSB7XG4gICAqICAgcmV0dXJuICd2YWx1ZSc7XG4gICAqIH0sXG4gICAqIGBgYFxuICAgKi9cbiAgaW1wbGVtZW50YXRpb246IHRzLkRlY2xhcmF0aW9ufG51bGw7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIG1lbWJlciBpcyBzdGF0aWMgb3Igbm90LlxuICAgKi9cbiAgaXNTdGF0aWM6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEFueSBgRGVjb3JhdG9yYHMgd2hpY2ggYXJlIHByZXNlbnQgb24gdGhlIG1lbWJlciwgb3IgYG51bGxgIGlmIG5vbmUgYXJlIHByZXNlbnQuXG4gICAqL1xuICBkZWNvcmF0b3JzOiBEZWNvcmF0b3JbXXxudWxsO1xufVxuXG5leHBvcnQgY29uc3QgZW51bSBUeXBlVmFsdWVSZWZlcmVuY2VLaW5kIHtcbiAgTE9DQUwsXG4gIElNUE9SVEVELFxuICBVTkFWQUlMQUJMRSxcbn1cblxuLyoqXG4gKiBBIHR5cGUgcmVmZXJlbmNlIHRoYXQgcmVmZXJzIHRvIGFueSB0eXBlIHZpYSBhIGB0cy5FeHByZXNzaW9uYCB0aGF0J3MgdmFsaWQgd2l0aGluIHRoZSBsb2NhbCBmaWxlXG4gKiB3aGVyZSB0aGUgdHlwZSB3YXMgcmVmZXJlbmNlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2NhbFR5cGVWYWx1ZVJlZmVyZW5jZSB7XG4gIGtpbmQ6IFR5cGVWYWx1ZVJlZmVyZW5jZUtpbmQuTE9DQUw7XG5cbiAgLyoqXG4gICAqIFRoZSBzeW50aGVzaXplZCBleHByZXNzaW9uIHRvIHJlZmVyZW5jZSB0aGUgdHlwZSBpbiBhIHZhbHVlIHBvc2l0aW9uLlxuICAgKi9cbiAgZXhwcmVzc2lvbjogdHMuRXhwcmVzc2lvbjtcblxuICAvKipcbiAgICogSWYgdGhlIHR5cGUgb3JpZ2luYXRlcyBmcm9tIGEgZGVmYXVsdCBpbXBvcnQsIHRoZSBpbXBvcnQgc3RhdGVtZW50IGlzIGNhcHR1cmVkIGhlcmUgdG8gYmUgYWJsZVxuICAgKiB0byB0cmFjayBpdHMgdXNhZ2VzLCBwcmV2ZW50aW5nIHRoZSBpbXBvcnQgZnJvbSBiZWluZyBlbGlkZWQgaWYgaXQgd2FzIG9yaWdpbmFsbHkgb25seSB1c2VkIGluXG4gICAqIGEgdHlwZS1wb3NpdGlvbi4gU2VlIGBEZWZhdWx0SW1wb3J0VHJhY2tlcmAgZm9yIGRldGFpbHMuXG4gICAqL1xuICBkZWZhdWx0SW1wb3J0U3RhdGVtZW50OiB0cy5JbXBvcnREZWNsYXJhdGlvbnxudWxsO1xufVxuXG4vKipcbiAqIEEgcmVmZXJlbmNlIHRoYXQgcmVmZXJzIHRvIGEgdHlwZSB0aGF0IHdhcyBpbXBvcnRlZCwgYW5kIGdpdmVzIHRoZSBzeW1ib2wgYG5hbWVgIGFuZCB0aGVcbiAqIGBtb2R1bGVOYW1lYCBvZiB0aGUgaW1wb3J0LiBOb3RlIHRoYXQgdGhpcyBgbW9kdWxlTmFtZWAgbWF5IGJlIGEgcmVsYXRpdmUgcGF0aCwgYW5kIHRodXMgaXNcbiAqIGxpa2VseSBvbmx5IHZhbGlkIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgZmlsZSB3aGljaCBjb250YWluZWQgdGhlIG9yaWdpbmFsIHR5cGUgcmVmZXJlbmNlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEltcG9ydGVkVHlwZVZhbHVlUmVmZXJlbmNlIHtcbiAga2luZDogVHlwZVZhbHVlUmVmZXJlbmNlS2luZC5JTVBPUlRFRDtcblxuICAvKipcbiAgICogVGhlIG1vZHVsZSBzcGVjaWZpZXIgZnJvbSB3aGljaCB0aGUgYGltcG9ydGVkTmFtZWAgc3ltYm9sIHNob3VsZCBiZSBpbXBvcnRlZC5cbiAgICovXG4gIG1vZHVsZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHRvcC1sZXZlbCBzeW1ib2wgdGhhdCBpcyBpbXBvcnRlZCBmcm9tIGBtb2R1bGVOYW1lYC4gSWYgYG5lc3RlZFBhdGhgIGlzIGFsc29cbiAgICogcHJlc2VudCwgYSBuZXN0ZWQgb2JqZWN0IGlzIGJlaW5nIHJlZmVyZW5jZWQgZnJvbSB0aGUgdG9wLWxldmVsIHN5bWJvbC5cbiAgICovXG4gIGltcG9ydGVkTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJZiBwcmVzZW50LCByZXByZXNlbnRzIHRoZSBzeW1ib2wgbmFtZXMgdGhhdCBhcmUgcmVmZXJlbmNlZCBmcm9tIHRoZSB0b3AtbGV2ZWwgaW1wb3J0LlxuICAgKiBXaGVuIGBudWxsYCBvciBlbXB0eSwgdGhlIGBpbXBvcnRlZE5hbWVgIGl0c2VsZiBpcyB0aGUgc3ltYm9sIGJlaW5nIHJlZmVyZW5jZWQuXG4gICAqL1xuICBuZXN0ZWRQYXRoOiBzdHJpbmdbXXxudWxsO1xuXG4gIHZhbHVlRGVjbGFyYXRpb246IERlY2xhcmF0aW9uTm9kZTtcbn1cblxuLyoqXG4gKiBBIHJlcHJlc2VudGF0aW9uIGZvciBhIHR5cGUgdmFsdWUgcmVmZXJlbmNlIHRoYXQgaXMgdXNlZCB3aGVuIG5vIHZhbHVlIGlzIGF2YWlsYWJsZS4gVGhpcyBjYW5cbiAqIG9jY3VyIGR1ZSB0byB2YXJpb3VzIHJlYXNvbnMsIHdoaWNoIGlzIGluZGljYXRlZCBpbiB0aGUgYHJlYXNvbmAgZmllbGQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVW5hdmFpbGFibGVUeXBlVmFsdWVSZWZlcmVuY2Uge1xuICBraW5kOiBUeXBlVmFsdWVSZWZlcmVuY2VLaW5kLlVOQVZBSUxBQkxFO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVhc29uIHdoeSBubyB2YWx1ZSByZWZlcmVuY2UgY291bGQgYmUgZGV0ZXJtaW5lZCBmb3IgYSB0eXBlLlxuICAgKi9cbiAgcmVhc29uOiBVbmF2YWlsYWJsZVZhbHVlO1xufVxuXG4vKipcbiAqIFRoZSB2YXJpb3VzIHJlYXNvbnMgd2h5IHRoZSBjb21waWxlciBtYXkgYmUgdW5hYmxlIHRvIHN5bnRoZXNpemUgYSB2YWx1ZSBmcm9tIGEgdHlwZSByZWZlcmVuY2UuXG4gKi9cbmV4cG9ydCBjb25zdCBlbnVtIFZhbHVlVW5hdmFpbGFibGVLaW5kIHtcbiAgLyoqXG4gICAqIE5vIHR5cGUgbm9kZSB3YXMgYXZhaWxhYmxlLlxuICAgKi9cbiAgTUlTU0lOR19UWVBFLFxuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBkb2VzIG5vdCBoYXZlIGEgdmFsdWUgZGVjbGFyYXRpb24sIGUuZy4gYW4gaW50ZXJmYWNlLlxuICAgKi9cbiAgTk9fVkFMVUVfREVDTEFSQVRJT04sXG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIGlzIGltcG9ydGVkIHVzaW5nIGEgdHlwZS1vbmx5IGltcG9ydHMsIHNvIGl0IGlzIG5vdCBzdWl0YWJsZSB0byBiZSB1c2VkIGluIGFcbiAgICogdmFsdWUtcG9zaXRpb24uXG4gICAqL1xuICBUWVBFX09OTFlfSU1QT1JULFxuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSByZWZlcmVuY2UgY291bGQgbm90IGJlIHJlc29sdmVkIHRvIGEgZGVjbGFyYXRpb24uXG4gICAqL1xuICBVTktOT1dOX1JFRkVSRU5DRSxcblxuICAvKipcbiAgICogVGhlIHR5cGUgY29ycmVzcG9uZHMgd2l0aCBhIG5hbWVzcGFjZS5cbiAgICovXG4gIE5BTUVTUEFDRSxcblxuICAvKipcbiAgICogVGhlIHR5cGUgaXMgbm90IHN1cHBvcnRlZCBpbiB0aGUgY29tcGlsZXIsIGZvciBleGFtcGxlIHVuaW9uIHR5cGVzLlxuICAgKi9cbiAgVU5TVVBQT1JURUQsXG59XG5cblxuZXhwb3J0IGludGVyZmFjZSBVbnN1cHBvcnRlZFR5cGUge1xuICBraW5kOiBWYWx1ZVVuYXZhaWxhYmxlS2luZC5VTlNVUFBPUlRFRDtcbiAgdHlwZU5vZGU6IHRzLlR5cGVOb2RlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5vVmFsdWVEZWNsYXJhdGlvbiB7XG4gIGtpbmQ6IFZhbHVlVW5hdmFpbGFibGVLaW5kLk5PX1ZBTFVFX0RFQ0xBUkFUSU9OO1xuICB0eXBlTm9kZTogdHMuVHlwZU5vZGU7XG4gIGRlY2w6IHRzLkRlY2xhcmF0aW9ufG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHlwZU9ubHlJbXBvcnQge1xuICBraW5kOiBWYWx1ZVVuYXZhaWxhYmxlS2luZC5UWVBFX09OTFlfSU1QT1JUO1xuICB0eXBlTm9kZTogdHMuVHlwZU5vZGU7XG4gIGltcG9ydENsYXVzZTogdHMuSW1wb3J0Q2xhdXNlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5hbWVzcGFjZUltcG9ydCB7XG4gIGtpbmQ6IFZhbHVlVW5hdmFpbGFibGVLaW5kLk5BTUVTUEFDRTtcbiAgdHlwZU5vZGU6IHRzLlR5cGVOb2RlO1xuICBpbXBvcnRDbGF1c2U6IHRzLkltcG9ydENsYXVzZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVbmtub3duUmVmZXJlbmNlIHtcbiAga2luZDogVmFsdWVVbmF2YWlsYWJsZUtpbmQuVU5LTk9XTl9SRUZFUkVOQ0U7XG4gIHR5cGVOb2RlOiB0cy5UeXBlTm9kZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNaXNzaW5nVHlwZSB7XG4gIGtpbmQ6IFZhbHVlVW5hdmFpbGFibGVLaW5kLk1JU1NJTkdfVFlQRTtcbn1cblxuLyoqXG4gKiBUaGUgdmFyaW91cyByZWFzb25zIHdoeSBhIHR5cGUgbm9kZSBtYXkgbm90IGJlIHJlZmVycmVkIHRvIGFzIGEgdmFsdWUuXG4gKi9cbmV4cG9ydCB0eXBlIFVuYXZhaWxhYmxlVmFsdWUgPVxuICAgIFVuc3VwcG9ydGVkVHlwZXxOb1ZhbHVlRGVjbGFyYXRpb258VHlwZU9ubHlJbXBvcnR8TmFtZXNwYWNlSW1wb3J0fFVua25vd25SZWZlcmVuY2V8TWlzc2luZ1R5cGU7XG5cbi8qKlxuICogQSByZWZlcmVuY2UgdG8gYSB2YWx1ZSB0aGF0IG9yaWdpbmF0ZWQgZnJvbSBhIHR5cGUgcG9zaXRpb24uXG4gKlxuICogRm9yIGV4YW1wbGUsIGEgY29uc3RydWN0b3IgcGFyYW1ldGVyIGNvdWxkIGJlIGRlY2xhcmVkIGFzIGBmb286IEZvb2AuIEEgYFR5cGVWYWx1ZVJlZmVyZW5jZWBcbiAqIGV4dHJhY3RlZCBmcm9tIHRoaXMgd291bGQgcmVmZXIgdG8gdGhlIHZhbHVlIG9mIHRoZSBjbGFzcyBgRm9vYCAoYXNzdW1pbmcgaXQgd2FzIGFjdHVhbGx5IGFcbiAqIHR5cGUpLlxuICpcbiAqIFNlZSB0aGUgaW5kaXZpZHVhbCB0eXBlcyBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi5cbiAqL1xuZXhwb3J0IHR5cGUgVHlwZVZhbHVlUmVmZXJlbmNlID1cbiAgICBMb2NhbFR5cGVWYWx1ZVJlZmVyZW5jZXxJbXBvcnRlZFR5cGVWYWx1ZVJlZmVyZW5jZXxVbmF2YWlsYWJsZVR5cGVWYWx1ZVJlZmVyZW5jZTtcblxuLyoqXG4gKiBBIHBhcmFtZXRlciB0byBhIGNvbnN0cnVjdG9yLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEN0b3JQYXJhbWV0ZXIge1xuICAvKipcbiAgICogTmFtZSBvZiB0aGUgcGFyYW1ldGVyLCBpZiBhdmFpbGFibGUuXG4gICAqXG4gICAqIFNvbWUgcGFyYW1ldGVycyBkb24ndCBoYXZlIGEgc2ltcGxlIHN0cmluZyBuYW1lIChmb3IgZXhhbXBsZSwgcGFyYW1ldGVycyB3aGljaCBhcmUgZGVzdHJ1Y3R1cmVkXG4gICAqIGludG8gbXVsdGlwbGUgdmFyaWFibGVzKS4gSW4gdGhlc2UgY2FzZXMsIGBuYW1lYCBjYW4gYmUgYG51bGxgLlxuICAgKi9cbiAgbmFtZTogc3RyaW5nfG51bGw7XG5cbiAgLyoqXG4gICAqIFR5cGVTY3JpcHQgYHRzLkJpbmRpbmdOYW1lYCByZXByZXNlbnRpbmcgdGhlIG5hbWUgb2YgdGhlIHBhcmFtZXRlci5cbiAgICpcbiAgICogVGhlIGBuYW1lTm9kZWAgaXMgdXNlZnVsIGluIHdyaXRpbmcgcmVmZXJlbmNlcyB0byB0aGlzIG1lbWJlciB0aGF0IHdpbGwgYmUgY29ycmVjdGx5IHNvdXJjZS1cbiAgICogbWFwcGVkIGJhY2sgdG8gdGhlIG9yaWdpbmFsIGZpbGUuXG4gICAqL1xuICBuYW1lTm9kZTogdHMuQmluZGluZ05hbWU7XG5cbiAgLyoqXG4gICAqIFJlZmVyZW5jZSB0byB0aGUgdmFsdWUgb2YgdGhlIHBhcmFtZXRlcidzIHR5cGUgYW5ub3RhdGlvbiwgaWYgaXQncyBwb3NzaWJsZSB0byByZWZlciB0byB0aGVcbiAgICogcGFyYW1ldGVyJ3MgdHlwZSBhcyBhIHZhbHVlLlxuICAgKlxuICAgKiBUaGlzIGNhbiBlaXRoZXIgYmUgYSByZWZlcmVuY2UgdG8gYSBsb2NhbCB2YWx1ZSwgYSByZWZlcmVuY2UgdG8gYW4gaW1wb3J0ZWQgdmFsdWUsIG9yIG5vXG4gICAqIHZhbHVlIGlmIG5vIGlzIHByZXNlbnQgb3IgY2Fubm90IGJlIHJlcHJlc2VudGVkIGFzIGFuIGV4cHJlc3Npb24uXG4gICAqL1xuICB0eXBlVmFsdWVSZWZlcmVuY2U6IFR5cGVWYWx1ZVJlZmVyZW5jZTtcblxuICAvKipcbiAgICogVHlwZVNjcmlwdCBgdHMuVHlwZU5vZGVgIHJlcHJlc2VudGluZyB0aGUgdHlwZSBub2RlIGZvdW5kIGluIHRoZSB0eXBlIHBvc2l0aW9uLlxuICAgKlxuICAgKiBUaGlzIGZpZWxkIGNhbiBiZSB1c2VkIGZvciBkaWFnbm9zdGljcyByZXBvcnRpbmcgaWYgYHR5cGVWYWx1ZVJlZmVyZW5jZWAgaXMgYG51bGxgLlxuICAgKlxuICAgKiBDYW4gYmUgbnVsbCwgaWYgdGhlIHBhcmFtIGhhcyBubyB0eXBlIGRlY2xhcmVkLlxuICAgKi9cbiAgdHlwZU5vZGU6IHRzLlR5cGVOb2RlfG51bGw7XG5cbiAgLyoqXG4gICAqIEFueSBgRGVjb3JhdG9yYHMgd2hpY2ggYXJlIHByZXNlbnQgb24gdGhlIHBhcmFtZXRlciwgb3IgYG51bGxgIGlmIG5vbmUgYXJlIHByZXNlbnQuXG4gICAqL1xuICBkZWNvcmF0b3JzOiBEZWNvcmF0b3JbXXxudWxsO1xufVxuXG4vKipcbiAqIERlZmluaXRpb24gb2YgYSBmdW5jdGlvbiBvciBtZXRob2QsIGluY2x1ZGluZyBpdHMgYm9keSBpZiBwcmVzZW50IGFuZCBhbnkgcGFyYW1ldGVycy5cbiAqXG4gKiBJbiBUeXBlU2NyaXB0IGNvZGUgdGhpcyBtZXRhZGF0YSB3aWxsIGJlIGEgc2ltcGxlIHJlZmxlY3Rpb24gb2YgdGhlIGRlY2xhcmF0aW9ucyBpbiB0aGUgbm9kZVxuICogaXRzZWxmLiBJbiBFUzUgY29kZSB0aGlzIGNhbiBiZSBtb3JlIGNvbXBsaWNhdGVkLCBhcyB0aGUgZGVmYXVsdCB2YWx1ZXMgZm9yIHBhcmFtZXRlcnMgbWF5XG4gKiBiZSBleHRyYWN0ZWQgZnJvbSBjZXJ0YWluIGJvZHkgc3RhdGVtZW50cy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGdW5jdGlvbkRlZmluaXRpb24ge1xuICAvKipcbiAgICogQSByZWZlcmVuY2UgdG8gdGhlIG5vZGUgd2hpY2ggZGVjbGFyZXMgdGhlIGZ1bmN0aW9uLlxuICAgKi9cbiAgbm9kZTogdHMuTWV0aG9kRGVjbGFyYXRpb258dHMuRnVuY3Rpb25EZWNsYXJhdGlvbnx0cy5GdW5jdGlvbkV4cHJlc3Npb258dHMuVmFyaWFibGVEZWNsYXJhdGlvbjtcblxuICAvKipcbiAgICogU3RhdGVtZW50cyBvZiB0aGUgZnVuY3Rpb24gYm9keSwgaWYgYSBib2R5IGlzIHByZXNlbnQsIG9yIG51bGwgaWYgbm8gYm9keSBpcyBwcmVzZW50IG9yIHRoZVxuICAgKiBmdW5jdGlvbiBpcyBpZGVudGlmaWVkIHRvIHJlcHJlc2VudCBhIHRzbGliIGhlbHBlciBmdW5jdGlvbiwgaW4gd2hpY2ggY2FzZSBgaGVscGVyYCB3aWxsXG4gICAqIGluZGljYXRlIHdoaWNoIGhlbHBlciB0aGlzIGZ1bmN0aW9uIHJlcHJlc2VudHMuXG4gICAqXG4gICAqIFRoaXMgbGlzdCBtYXkgaGF2ZSBiZWVuIGZpbHRlcmVkIHRvIGV4Y2x1ZGUgc3RhdGVtZW50cyB3aGljaCBwZXJmb3JtIHBhcmFtZXRlciBkZWZhdWx0IHZhbHVlXG4gICAqIGluaXRpYWxpemF0aW9uLlxuICAgKi9cbiAgYm9keTogdHMuU3RhdGVtZW50W118bnVsbDtcblxuICAvKipcbiAgICogTWV0YWRhdGEgcmVnYXJkaW5nIHRoZSBmdW5jdGlvbidzIHBhcmFtZXRlcnMsIGluY2x1ZGluZyBwb3NzaWJsZSBkZWZhdWx0IHZhbHVlIGV4cHJlc3Npb25zLlxuICAgKi9cbiAgcGFyYW1ldGVyczogUGFyYW1ldGVyW107XG59XG5cbi8qKlxuICogUG9zc2libGUgZGVjbGFyYXRpb25zIG9mIGtub3duIHZhbHVlcywgc3VjaCBhcyBidWlsdC1pbiBvYmplY3RzL2Z1bmN0aW9ucyBvciBUeXBlU2NyaXB0IGhlbHBlcnMuXG4gKi9cbmV4cG9ydCBlbnVtIEtub3duRGVjbGFyYXRpb24ge1xuICAvKipcbiAgICogSW5kaWNhdGVzIHRoZSBKYXZhU2NyaXB0IGdsb2JhbCBgT2JqZWN0YCBjbGFzcy5cbiAgICovXG4gIEpzR2xvYmFsT2JqZWN0LFxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhlIGBfX2Fzc2lnbmAgVHlwZVNjcmlwdCBoZWxwZXIgZnVuY3Rpb24uXG4gICAqL1xuICBUc0hlbHBlckFzc2lnbixcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHRoZSBgX19zcHJlYWRgIFR5cGVTY3JpcHQgaGVscGVyIGZ1bmN0aW9uLlxuICAgKi9cbiAgVHNIZWxwZXJTcHJlYWQsXG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGUgYF9fc3ByZWFkQXJyYXlzYCBUeXBlU2NyaXB0IGhlbHBlciBmdW5jdGlvbi5cbiAgICovXG4gIFRzSGVscGVyU3ByZWFkQXJyYXlzLFxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhlIGBfX3NwcmVhZEFycmF5YCBUeXBlU2NyaXB0IGhlbHBlciBmdW5jdGlvbi5cbiAgICovXG4gIFRzSGVscGVyU3ByZWFkQXJyYXksXG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGUgYF9fcmVhZGAgVHlwZVNjcmlwdCBoZWxwZXIgZnVuY3Rpb24uXG4gICAqL1xuICBUc0hlbHBlclJlYWQsXG59XG5cbi8qKlxuICogQSBwYXJhbWV0ZXIgdG8gYSBmdW5jdGlvbiBvciBtZXRob2QuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFyYW1ldGVyIHtcbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIHBhcmFtZXRlciwgaWYgYXZhaWxhYmxlLlxuICAgKi9cbiAgbmFtZTogc3RyaW5nfG51bGw7XG5cbiAgLyoqXG4gICAqIERlY2xhcmF0aW9uIHdoaWNoIGNyZWF0ZWQgdGhpcyBwYXJhbWV0ZXIuXG4gICAqL1xuICBub2RlOiB0cy5QYXJhbWV0ZXJEZWNsYXJhdGlvbjtcblxuICAvKipcbiAgICogRXhwcmVzc2lvbiB3aGljaCByZXByZXNlbnRzIHRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSBwYXJhbWV0ZXIsIGlmIGFueS5cbiAgICovXG4gIGluaXRpYWxpemVyOiB0cy5FeHByZXNzaW9ufG51bGw7XG59XG5cbi8qKlxuICogVGhlIHNvdXJjZSBvZiBhbiBpbXBvcnRlZCBzeW1ib2wsIGluY2x1ZGluZyB0aGUgb3JpZ2luYWwgc3ltYm9sIG5hbWUgYW5kIHRoZSBtb2R1bGUgZnJvbSB3aGljaCBpdFxuICogd2FzIGltcG9ydGVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEltcG9ydCB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgaW1wb3J0ZWQgc3ltYm9sIHVuZGVyIHdoaWNoIGl0IHdhcyBleHBvcnRlZCAobm90IGltcG9ydGVkKS5cbiAgICovXG4gIG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG1vZHVsZSBmcm9tIHdoaWNoIHRoZSBzeW1ib2wgd2FzIGltcG9ydGVkLlxuICAgKlxuICAgKiBUaGlzIGNvdWxkIGVpdGhlciBiZSBhbiBhYnNvbHV0ZSBtb2R1bGUgbmFtZSAoQGFuZ3VsYXIvY29yZSBmb3IgZXhhbXBsZSkgb3IgYSByZWxhdGl2ZSBwYXRoLlxuICAgKi9cbiAgZnJvbTogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgc2luZ2xlIGVudW0gbWVtYmVyIGV4dHJhY3RlZCBmcm9tIEphdmFTY3JpcHQgd2hlbiBubyBgdHMuRW51bURlY2xhcmF0aW9uYCBpcyBhdmFpbGFibGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW51bU1lbWJlciB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgZW51bSBtZW1iZXIuXG4gICAqL1xuICBuYW1lOiB0cy5Qcm9wZXJ0eU5hbWU7XG5cbiAgLyoqXG4gICAqIFRoZSBpbml0aWFsaXplciBleHByZXNzaW9uIG9mIHRoZSBlbnVtIG1lbWJlci4gVW5saWtlIGluIFR5cGVTY3JpcHQsIHRoaXMgaXMgYWx3YXlzIGF2YWlsYWJsZVxuICAgKiBpbiBlbWl0dGVkIEphdmFTY3JpcHQuXG4gICAqL1xuICBpbml0aWFsaXplcjogdHMuRXhwcmVzc2lvbjtcbn1cblxuLyoqXG4gKiBBIHR5cGUgdGhhdCBpcyB1c2VkIHRvIGlkZW50aWZ5IGEgZGVjbGFyYXRpb24uXG4gKlxuICogRGVjbGFyYXRpb25zIGFyZSBub3JtYWxseSBgdHMuRGVjbGFyYXRpb25gIHR5cGVzIHN1Y2ggYXMgdmFyaWFibGUgZGVjbGFyYXRpb25zLCBjbGFzc1xuICogZGVjbGFyYXRpb25zLCBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgZXRjLlxuICogQnV0IGluIHNvbWUgY2FzZXMgdGhlcmUgaXMgbm8gYHRzLkRlY2xhcmF0aW9uYCB0aGF0IGNhbiBiZSB1c2VkIGZvciBhIGRlY2xhcmF0aW9uLCBzdWNoXG4gKiBhcyB3aGVuIHRoZXkgYXJlIGRlY2xhcmVkIGlubGluZSBhcyBwYXJ0IG9mIGFuIGV4cG9ydGVkIGV4cHJlc3Npb24uIFRoZW4gd2UgbXVzdCB1c2UgYVxuICogYHRzLkV4cHJlc3Npb25gIGFzIHRoZSBkZWNsYXJhdGlvbi5cbiAqIEFuIGV4YW1wbGUgb2YgdGhpcyBpcyBgZXhwb3J0cy5zb21lVmFyID0gNDJgIHdoZXJlIHRoZSBkZWNsYXJhdGlvbiBleHByZXNzaW9uIHdvdWxkIGJlXG4gKiBgZXhwb3J0cy5zb21lVmFyYC5cbiAqL1xuZXhwb3J0IHR5cGUgRGVjbGFyYXRpb25Ob2RlID0gdHMuRGVjbGFyYXRpb258dHMuRXhwcmVzc2lvbjtcblxuLyoqXG4gKiBUaGUgdHlwZSBvZiBhIERlY2xhcmF0aW9uIC0gd2hldGhlciBpdHMgbm9kZSBpcyBjb25jcmV0ZSAodHMuRGVjbGFyYXRpb24pIG9yIGlubGluZVxuICogKHRzLkV4cHJlc3Npb24pLiBTZWUgYENvbmNyZXRlRGVjbGFyYXRpb25gLCBgSW5saW5lRGVjbGFyYXRpb25gIGFuZCBgRGVjbGFyYXRpb25Ob2RlYCBmb3IgbW9yZVxuICogaW5mb3JtYXRpb24gYWJvdXQgdGhpcy5cbiAqL1xuZXhwb3J0IGNvbnN0IGVudW0gRGVjbGFyYXRpb25LaW5kIHtcbiAgQ29uY3JldGUsXG4gIElubGluZSxcbn1cblxuLyoqXG4gKiBCYXNlIHR5cGUgZm9yIGFsbCBgRGVjbGFyYXRpb25gcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCYXNlRGVjbGFyYXRpb248VCBleHRlbmRzIERlY2xhcmF0aW9uTm9kZT4ge1xuICAvKipcbiAgICogVGhlIHR5cGUgb2YgdGhlIHVuZGVybHlpbmcgYG5vZGVgLlxuICAgKi9cbiAga2luZDogRGVjbGFyYXRpb25LaW5kO1xuXG4gIC8qKlxuICAgKiBUaGUgYWJzb2x1dGUgbW9kdWxlIHBhdGggZnJvbSB3aGljaCB0aGUgc3ltYm9sIHdhcyBpbXBvcnRlZCBpbnRvIHRoZSBhcHBsaWNhdGlvbiwgaWYgdGhlIHN5bWJvbFxuICAgKiB3YXMgaW1wb3J0ZWQgdmlhIGFuIGFic29sdXRlIG1vZHVsZSAoZXZlbiB0aHJvdWdoIGEgY2hhaW4gb2YgcmUtZXhwb3J0cykuIElmIHRoZSBzeW1ib2wgaXMgcGFydFxuICAgKiBvZiB0aGUgYXBwbGljYXRpb24gYW5kIHdhcyBub3QgaW1wb3J0ZWQgZnJvbSBhbiBhYnNvbHV0ZSBwYXRoLCB0aGlzIHdpbGwgYmUgYG51bGxgLlxuICAgKi9cbiAgdmlhTW9kdWxlOiBzdHJpbmd8bnVsbDtcblxuICAvKipcbiAgICogVHlwZVNjcmlwdCByZWZlcmVuY2UgdG8gdGhlIGRlY2xhcmF0aW9uIGl0c2VsZiwgaWYgb25lIGV4aXN0cy5cbiAgICovXG4gIG5vZGU6IFQ7XG5cbiAgLyoqXG4gICAqIElmIHNldCwgZGVzY3JpYmVzIHRoZSB0eXBlIG9mIHRoZSBrbm93biBkZWNsYXJhdGlvbiB0aGlzIGRlY2xhcmF0aW9uIHJlc29sdmVzIHRvLlxuICAgKi9cbiAga25vd246IEtub3duRGVjbGFyYXRpb258bnVsbDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGBkZWNsYCBpcyBhIGBDb25jcmV0ZURlY2xhcmF0aW9uYCAoaWUuIHRoYXQgaXRzIGBub2RlYCBwcm9wZXJ0eSBpcyBhXG4gKiBgdHMuRGVjbGFyYXRpb25gKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ29uY3JldGVEZWNsYXJhdGlvbihkZWNsOiBEZWNsYXJhdGlvbik6IGRlY2wgaXMgQ29uY3JldGVEZWNsYXJhdGlvbiB7XG4gIHJldHVybiBkZWNsLmtpbmQgPT09IERlY2xhcmF0aW9uS2luZC5Db25jcmV0ZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb25jcmV0ZURlY2xhcmF0aW9uPFQgZXh0ZW5kcyB0cy5EZWNsYXJhdGlvbiA9IHRzLkRlY2xhcmF0aW9uPiBleHRlbmRzXG4gICAgQmFzZURlY2xhcmF0aW9uPFQ+IHtcbiAga2luZDogRGVjbGFyYXRpb25LaW5kLkNvbmNyZXRlO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbGx5IHJlcHJlc2VudHMgYSBzcGVjaWFsIGlkZW50aXR5IG9mIHRoZSBkZWNsYXJhdGlvbiwgb3IgYG51bGxgIGlmIHRoZSBkZWNsYXJhdGlvblxuICAgKiBkb2VzIG5vdCBoYXZlIGEgc3BlY2lhbCBpZGVudGl0eS5cbiAgICovXG4gIGlkZW50aXR5OiBTcGVjaWFsRGVjbGFyYXRpb25JZGVudGl0eXxudWxsO1xufVxuXG5leHBvcnQgdHlwZSBTcGVjaWFsRGVjbGFyYXRpb25JZGVudGl0eSA9IERvd25sZXZlbGVkRW51bTtcblxuZXhwb3J0IGNvbnN0IGVudW0gU3BlY2lhbERlY2xhcmF0aW9uS2luZCB7XG4gIERvd25sZXZlbGVkRW51bSxcbn1cblxuLyoqXG4gKiBBIHNwZWNpYWwgZGVjbGFyYXRpb24gaWRlbnRpdHkgdGhhdCByZXByZXNlbnRzIGFuIGVudW0uIFRoaXMgaXMgdXNlZCBpbiBkb3dubGV2ZWxlZCBmb3JtcyB3aGVyZVxuICogYSBgdHMuRW51bURlY2xhcmF0aW9uYCBpcyBlbWl0dGVkIGluIGFuIGFsdGVybmF0aXZlIGZvcm0sIGUuZy4gYW4gSUlGRSBjYWxsIHRoYXQgZGVjbGFyZXMgYWxsXG4gKiBtZW1iZXJzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERvd25sZXZlbGVkRW51bSB7XG4gIGtpbmQ6IFNwZWNpYWxEZWNsYXJhdGlvbktpbmQuRG93bmxldmVsZWRFbnVtO1xuICBlbnVtTWVtYmVyczogRW51bU1lbWJlcltdO1xufVxuXG4vKipcbiAqIEEgZGVjbGFyYXRpb24gdGhhdCBkb2VzIG5vdCBoYXZlIGFuIGFzc29jaWF0ZWQgVHlwZVNjcmlwdCBgdHMuRGVjbGFyYXRpb25gLlxuICpcbiAqIFRoaXMgY2FuIG9jY3VyIGluIHNvbWUgZG93bmxldmVsaW5ncyB3aGVuIGFuIGBleHBvcnQgY29uc3QgVkFSID0gLi4uO2AgKGEgYHRzLkRlY2xhcmF0aW9uYCkgaXNcbiAqIHRyYW5zcGlsZWQgdG8gYW4gYXNzaWdubWVudCBzdGF0ZW1lbnQgKGUuZy4gYGV4cG9ydHMuVkFSID0gLi4uO2ApLiBUaGVyZSBpcyBubyBgdHMuRGVjbGFyYXRpb25gXG4gKiBhc3NvY2lhdGVkIHdpdGggYFZBUmAgaW4gdGhhdCBjYXNlLCBvbmx5IGFuIGV4cHJlc3Npb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5saW5lRGVjbGFyYXRpb24gZXh0ZW5kc1xuICAgIEJhc2VEZWNsYXJhdGlvbjxFeGNsdWRlPERlY2xhcmF0aW9uTm9kZSwgdHMuRGVjbGFyYXRpb24+PiB7XG4gIGtpbmQ6IERlY2xhcmF0aW9uS2luZC5JbmxpbmU7XG4gIGltcGxlbWVudGF0aW9uPzogRGVjbGFyYXRpb25Ob2RlO1xufVxuXG4vKipcbiAqIFRoZSBkZWNsYXJhdGlvbiBvZiBhIHN5bWJvbCwgYWxvbmcgd2l0aCBpbmZvcm1hdGlvbiBhYm91dCBob3cgaXQgd2FzIGltcG9ydGVkIGludG8gdGhlXG4gKiBhcHBsaWNhdGlvbi5cbiAqL1xuZXhwb3J0IHR5cGUgRGVjbGFyYXRpb248VCBleHRlbmRzIHRzLkRlY2xhcmF0aW9uID0gdHMuRGVjbGFyYXRpb24+ID1cbiAgICBDb25jcmV0ZURlY2xhcmF0aW9uPFQ+fElubGluZURlY2xhcmF0aW9uO1xuXG4vKipcbiAqIEFic3RyYWN0cyByZWZsZWN0aW9uIG9wZXJhdGlvbnMgb24gYSBUeXBlU2NyaXB0IEFTVC5cbiAqXG4gKiBEZXBlbmRpbmcgb24gdGhlIGZvcm1hdCBvZiB0aGUgY29kZSBiZWluZyBpbnRlcnByZXRlZCwgZGlmZmVyZW50IGNvbmNlcHRzIGFyZSByZXByZXNlbnRlZFxuICogd2l0aCBkaWZmZXJlbnQgc3ludGFjdGljYWwgc3RydWN0dXJlcy4gVGhlIGBSZWZsZWN0aW9uSG9zdGAgYWJzdHJhY3RzIG92ZXIgdGhvc2UgZGlmZmVyZW5jZXMgYW5kXG4gKiBwcmVzZW50cyBhIHNpbmdsZSBBUEkgYnkgd2hpY2ggdGhlIGNvbXBpbGVyIGNhbiBxdWVyeSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgQVNULlxuICpcbiAqIEFsbCBvcGVyYXRpb25zIG9uIHRoZSBgUmVmbGVjdGlvbkhvc3RgIHJlcXVpcmUgdGhlIHVzZSBvZiBUeXBlU2NyaXB0IGB0cy5Ob2RlYHMgd2l0aCBiaW5kaW5nXG4gKiBpbmZvcm1hdGlvbiBhbHJlYWR5IGF2YWlsYWJsZSAodGhhdCBpcywgbm9kZXMgdGhhdCBjb21lIGZyb20gYSBgdHMuUHJvZ3JhbWAgdGhhdCBoYXMgYmVlblxuICogdHlwZS1jaGVja2VkLCBhbmQgYXJlIG5vdCBzeW50aGV0aWNhbGx5IGNyZWF0ZWQpLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZmxlY3Rpb25Ib3N0IHtcbiAgLyoqXG4gICAqIEV4YW1pbmUgYSBkZWNsYXJhdGlvbiAoZm9yIGV4YW1wbGUsIG9mIGEgY2xhc3Mgb3IgZnVuY3Rpb24pIGFuZCByZXR1cm4gbWV0YWRhdGEgYWJvdXQgYW55XG4gICAqIGRlY29yYXRvcnMgcHJlc2VudCBvbiB0aGUgZGVjbGFyYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSBkZWNsYXJhdGlvbiBhIFR5cGVTY3JpcHQgYHRzLkRlY2xhcmF0aW9uYCBub2RlIHJlcHJlc2VudGluZyB0aGUgY2xhc3Mgb3IgZnVuY3Rpb24gb3ZlclxuICAgKiB3aGljaCB0byByZWZsZWN0LiBGb3IgZXhhbXBsZSwgaWYgdGhlIGludGVudCBpcyB0byByZWZsZWN0IHRoZSBkZWNvcmF0b3JzIG9mIGEgY2xhc3MgYW5kIHRoZVxuICAgKiBzb3VyY2UgaXMgaW4gRVM2IGZvcm1hdCwgdGhpcyB3aWxsIGJlIGEgYHRzLkNsYXNzRGVjbGFyYXRpb25gIG5vZGUuIElmIHRoZSBzb3VyY2UgaXMgaW4gRVM1XG4gICAqIGZvcm1hdCwgdGhpcyBtaWdodCBiZSBhIGB0cy5WYXJpYWJsZURlY2xhcmF0aW9uYCBhcyBjbGFzc2VzIGluIEVTNSBhcmUgcmVwcmVzZW50ZWQgYXMgdGhlXG4gICAqIHJlc3VsdCBvZiBhbiBJSUZFIGV4ZWN1dGlvbi5cbiAgICpcbiAgICogQHJldHVybnMgYW4gYXJyYXkgb2YgYERlY29yYXRvcmAgbWV0YWRhdGEgaWYgZGVjb3JhdG9ycyBhcmUgcHJlc2VudCBvbiB0aGUgZGVjbGFyYXRpb24sIG9yXG4gICAqIGBudWxsYCBpZiBlaXRoZXIgbm8gZGVjb3JhdG9ycyB3ZXJlIHByZXNlbnQgb3IgaWYgdGhlIGRlY2xhcmF0aW9uIGlzIG5vdCBvZiBhIGRlY29yYXRhYmxlIHR5cGUuXG4gICAqL1xuICBnZXREZWNvcmF0b3JzT2ZEZWNsYXJhdGlvbihkZWNsYXJhdGlvbjogRGVjbGFyYXRpb25Ob2RlKTogRGVjb3JhdG9yW118bnVsbDtcblxuICAvKipcbiAgICogRXhhbWluZSBhIGRlY2xhcmF0aW9uIHdoaWNoIHNob3VsZCBiZSBvZiBhIGNsYXNzLCBhbmQgcmV0dXJuIG1ldGFkYXRhIGFib3V0IHRoZSBtZW1iZXJzIG9mIHRoZVxuICAgKiBjbGFzcy5cbiAgICpcbiAgICogQHBhcmFtIGNsYXp6IGEgYENsYXNzRGVjbGFyYXRpb25gIHJlcHJlc2VudGluZyB0aGUgY2xhc3Mgb3ZlciB3aGljaCB0byByZWZsZWN0LlxuICAgKlxuICAgKiBAcmV0dXJucyBhbiBhcnJheSBvZiBgQ2xhc3NNZW1iZXJgIG1ldGFkYXRhIHJlcHJlc2VudGluZyB0aGUgbWVtYmVycyBvZiB0aGUgY2xhc3MuXG4gICAqXG4gICAqIEB0aHJvd3MgaWYgYGRlY2xhcmF0aW9uYCBkb2VzIG5vdCByZXNvbHZlIHRvIGEgY2xhc3MgZGVjbGFyYXRpb24uXG4gICAqL1xuICBnZXRNZW1iZXJzT2ZDbGFzcyhjbGF6ejogQ2xhc3NEZWNsYXJhdGlvbik6IENsYXNzTWVtYmVyW107XG5cbiAgLyoqXG4gICAqIFJlZmxlY3Qgb3ZlciB0aGUgY29uc3RydWN0b3Igb2YgYSBjbGFzcyBhbmQgcmV0dXJuIG1ldGFkYXRhIGFib3V0IGl0cyBwYXJhbWV0ZXJzLlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBvbmx5IGxvb2tzIGF0IHRoZSBjb25zdHJ1Y3RvciBvZiBhIGNsYXNzIGRpcmVjdGx5IGFuZCBub3QgYXQgYW55IGluaGVyaXRlZFxuICAgKiBjb25zdHJ1Y3RvcnMuXG4gICAqXG4gICAqIEBwYXJhbSBjbGF6eiBhIGBDbGFzc0RlY2xhcmF0aW9uYCByZXByZXNlbnRpbmcgdGhlIGNsYXNzIG92ZXIgd2hpY2ggdG8gcmVmbGVjdC5cbiAgICpcbiAgICogQHJldHVybnMgYW4gYXJyYXkgb2YgYFBhcmFtZXRlcmAgbWV0YWRhdGEgcmVwcmVzZW50aW5nIHRoZSBwYXJhbWV0ZXJzIG9mIHRoZSBjb25zdHJ1Y3RvciwgaWZcbiAgICogYSBjb25zdHJ1Y3RvciBleGlzdHMuIElmIHRoZSBjb25zdHJ1Y3RvciBleGlzdHMgYW5kIGhhcyAwIHBhcmFtZXRlcnMsIHRoaXMgYXJyYXkgd2lsbCBiZSBlbXB0eS5cbiAgICogSWYgdGhlIGNsYXNzIGhhcyBubyBjb25zdHJ1Y3RvciwgdGhpcyBtZXRob2QgcmV0dXJucyBgbnVsbGAuXG4gICAqL1xuICBnZXRDb25zdHJ1Y3RvclBhcmFtZXRlcnMoY2xheno6IENsYXNzRGVjbGFyYXRpb24pOiBDdG9yUGFyYW1ldGVyW118bnVsbDtcblxuICAvKipcbiAgICogUmVmbGVjdCBvdmVyIGEgZnVuY3Rpb24gYW5kIHJldHVybiBtZXRhZGF0YSBhYm91dCBpdHMgcGFyYW1ldGVycyBhbmQgYm9keS5cbiAgICpcbiAgICogRnVuY3Rpb25zIGluIFR5cGVTY3JpcHQgYW5kIEVTNSBjb2RlIGhhdmUgZGlmZmVyZW50IEFTVCByZXByZXNlbnRhdGlvbnMsIGluIHBhcnRpY3VsYXIgYXJvdW5kXG4gICAqIGRlZmF1bHQgdmFsdWVzIGZvciBwYXJhbWV0ZXJzLiBBIFR5cGVTY3JpcHQgZnVuY3Rpb24gaGFzIGl0cyBkZWZhdWx0IHZhbHVlIGFzIHRoZSBpbml0aWFsaXplclxuICAgKiBvbiB0aGUgcGFyYW1ldGVyIGRlY2xhcmF0aW9uLCB3aGVyZWFzIGFuIEVTNSBmdW5jdGlvbiBoYXMgaXRzIGRlZmF1bHQgdmFsdWUgc2V0IGluIGEgc3RhdGVtZW50XG4gICAqIG9mIHRoZSBmb3JtOlxuICAgKlxuICAgKiBpZiAocGFyYW0gPT09IHZvaWQgMCkgeyBwYXJhbSA9IDM7IH1cbiAgICpcbiAgICogVGhpcyBtZXRob2QgYWJzdHJhY3RzIG92ZXIgdGhlc2UgZGV0YWlscywgYW5kIGludGVycHJldHMgdGhlIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIGFuZCBib2R5IHRvXG4gICAqIGV4dHJhY3QgcGFyYW1ldGVyIGRlZmF1bHQgdmFsdWVzIGFuZCB0aGUgXCJyZWFsXCIgYm9keS5cbiAgICpcbiAgICogQSBjdXJyZW50IGxpbWl0YXRpb24gaXMgdGhhdCB0aGlzIG1ldGFkYXRhIGhhcyBubyByZXByZXNlbnRhdGlvbiBmb3Igc2hvcnRoYW5kIGFzc2lnbm1lbnQgb2ZcbiAgICogcGFyYW1ldGVyIG9iamVjdHMgaW4gdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZS5cbiAgICpcbiAgICogQHBhcmFtIGZuIGEgVHlwZVNjcmlwdCBgdHMuRGVjbGFyYXRpb25gIG5vZGUgcmVwcmVzZW50aW5nIHRoZSBmdW5jdGlvbiBvdmVyIHdoaWNoIHRvIHJlZmxlY3QuXG4gICAqXG4gICAqIEByZXR1cm5zIGEgYEZ1bmN0aW9uRGVmaW5pdGlvbmAgZ2l2aW5nIG1ldGFkYXRhIGFib3V0IHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uLlxuICAgKi9cbiAgZ2V0RGVmaW5pdGlvbk9mRnVuY3Rpb24oZm46IHRzLk5vZGUpOiBGdW5jdGlvbkRlZmluaXRpb258bnVsbDtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lIGlmIGFuIGlkZW50aWZpZXIgd2FzIGltcG9ydGVkIGZyb20gYW5vdGhlciBtb2R1bGUgYW5kIHJldHVybiBgSW1wb3J0YCBtZXRhZGF0YVxuICAgKiBkZXNjcmliaW5nIGl0cyBvcmlnaW4uXG4gICAqXG4gICAqIEBwYXJhbSBpZCBhIFR5cGVTY3JpcHQgYHRzLklkZW50aWZlcmAgdG8gcmVmbGVjdC5cbiAgICpcbiAgICogQHJldHVybnMgbWV0YWRhdGEgYWJvdXQgdGhlIGBJbXBvcnRgIGlmIHRoZSBpZGVudGlmaWVyIHdhcyBpbXBvcnRlZCBmcm9tIGFub3RoZXIgbW9kdWxlLCBvclxuICAgKiBgbnVsbGAgaWYgdGhlIGlkZW50aWZpZXIgZG9lc24ndCByZXNvbHZlIHRvIGFuIGltcG9ydCBidXQgaW5zdGVhZCBpcyBsb2NhbGx5IGRlZmluZWQuXG4gICAqL1xuICBnZXRJbXBvcnRPZklkZW50aWZpZXIoaWQ6IHRzLklkZW50aWZpZXIpOiBJbXBvcnR8bnVsbDtcblxuICAvKipcbiAgICogVHJhY2UgYW4gaWRlbnRpZmllciB0byBpdHMgZGVjbGFyYXRpb24sIGlmIHBvc3NpYmxlLlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBhdHRlbXB0cyB0byByZXNvbHZlIHRoZSBkZWNsYXJhdGlvbiBvZiB0aGUgZ2l2ZW4gaWRlbnRpZmllciwgdHJhY2luZyBiYWNrIHRocm91Z2hcbiAgICogaW1wb3J0cyBhbmQgcmUtZXhwb3J0cyB1bnRpbCB0aGUgb3JpZ2luYWwgZGVjbGFyYXRpb24gc3RhdGVtZW50IGlzIGZvdW5kLiBBIGBEZWNsYXJhdGlvbmBcbiAgICogb2JqZWN0IGlzIHJldHVybmVkIGlmIHRoZSBvcmlnaW5hbCBkZWNsYXJhdGlvbiBpcyBmb3VuZCwgb3IgYG51bGxgIGlzIHJldHVybmVkIG90aGVyd2lzZS5cbiAgICpcbiAgICogSWYgdGhlIGRlY2xhcmF0aW9uIGlzIGluIGEgZGlmZmVyZW50IG1vZHVsZSwgYW5kIHRoYXQgbW9kdWxlIGlzIGltcG9ydGVkIHZpYSBhbiBhYnNvbHV0ZSBwYXRoLFxuICAgKiB0aGlzIG1ldGhvZCBhbHNvIHJldHVybnMgdGhlIGFic29sdXRlIHBhdGggb2YgdGhlIGltcG9ydGVkIG1vZHVsZS4gRm9yIGV4YW1wbGUsIGlmIHRoZSBjb2RlIGlzOlxuICAgKlxuICAgKiBgYGBcbiAgICogaW1wb3J0IHtSb3V0ZXJNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuICAgKlxuICAgKiBleHBvcnQgY29uc3QgUk9VVEVTID0gUm91dGVyTW9kdWxlLmZvclJvb3QoWy4uLl0pO1xuICAgKiBgYGBcbiAgICpcbiAgICogYW5kIGlmIGBnZXREZWNsYXJhdGlvbk9mSWRlbnRpZmllcmAgaXMgY2FsbGVkIG9uIGBSb3V0ZXJNb2R1bGVgIGluIHRoZSBgUk9VVEVTYCBleHByZXNzaW9uLFxuICAgKiB0aGVuIGl0IHdvdWxkIHRyYWNlIGBSb3V0ZXJNb2R1bGVgIHZpYSBpdHMgaW1wb3J0IGZyb20gYEBhbmd1bGFyL2NvcmVgLCBhbmQgbm90ZSB0aGF0IHRoZVxuICAgKiBkZWZpbml0aW9uIHdhcyBpbXBvcnRlZCBmcm9tIGBAYW5ndWxhci9jb3JlYCBpbnRvIHRoZSBhcHBsaWNhdGlvbiB3aGVyZSBpdCB3YXMgcmVmZXJlbmNlZC5cbiAgICpcbiAgICogSWYgdGhlIGRlZmluaXRpb24gaXMgcmUtZXhwb3J0ZWQgc2V2ZXJhbCB0aW1lcyBmcm9tIGRpZmZlcmVudCBhYnNvbHV0ZSBtb2R1bGUgbmFtZXMsIG9ubHlcbiAgICogdGhlIGZpcnN0IG9uZSAodGhlIG9uZSBieSB3aGljaCB0aGUgYXBwbGljYXRpb24gcmVmZXJzIHRvIHRoZSBtb2R1bGUpIGlzIHJldHVybmVkLlxuICAgKlxuICAgKiBUaGlzIG1vZHVsZSBuYW1lIGlzIHJldHVybmVkIGluIHRoZSBgdmlhTW9kdWxlYCBmaWVsZCBvZiB0aGUgYERlY2xhcmF0aW9uYC4gSWYgVGhlIGRlY2xhcmF0aW9uXG4gICAqIGlzIHJlbGF0aXZlIHRvIHRoZSBhcHBsaWNhdGlvbiBpdHNlbGYgYW5kIHRoZXJlIHdhcyBubyBpbXBvcnQgdGhyb3VnaCBhbiBhYnNvbHV0ZSBwYXRoLCB0aGVuXG4gICAqIGB2aWFNb2R1bGVgIGlzIGBudWxsYC5cbiAgICpcbiAgICogQHBhcmFtIGlkIGEgVHlwZVNjcmlwdCBgdHMuSWRlbnRpZmllcmAgdG8gdHJhY2UgYmFjayB0byBhIGRlY2xhcmF0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyBtZXRhZGF0YSBhYm91dCB0aGUgYERlY2xhcmF0aW9uYCBpZiB0aGUgb3JpZ2luYWwgZGVjbGFyYXRpb24gaXMgZm91bmQsIG9yIGBudWxsYFxuICAgKiBvdGhlcndpc2UuXG4gICAqL1xuICBnZXREZWNsYXJhdGlvbk9mSWRlbnRpZmllcihpZDogdHMuSWRlbnRpZmllcik6IERlY2xhcmF0aW9ufG51bGw7XG5cbiAgLyoqXG4gICAqIENvbGxlY3QgdGhlIGRlY2xhcmF0aW9ucyBleHBvcnRlZCBmcm9tIGEgbW9kdWxlIGJ5IG5hbWUuXG4gICAqXG4gICAqIEl0ZXJhdGVzIG92ZXIgdGhlIGV4cG9ydHMgb2YgYSBtb2R1bGUgKGluY2x1ZGluZyByZS1leHBvcnRzKSBhbmQgcmV0dXJucyBhIG1hcCBvZiBleHBvcnRcbiAgICogbmFtZSB0byBpdHMgYERlY2xhcmF0aW9uYC4gSWYgYW4gZXhwb3J0ZWQgdmFsdWUgaXMgaXRzZWxmIHJlLWV4cG9ydGVkIGZyb20gYW5vdGhlciBtb2R1bGUsXG4gICAqIHRoZSBgRGVjbGFyYXRpb25gJ3MgYHZpYU1vZHVsZWAgd2lsbCByZWZsZWN0IHRoYXQuXG4gICAqXG4gICAqIEBwYXJhbSBub2RlIGEgVHlwZVNjcmlwdCBgdHMuTm9kZWAgcmVwcmVzZW50aW5nIHRoZSBtb2R1bGUgKGZvciBleGFtcGxlIGEgYHRzLlNvdXJjZUZpbGVgKSBmb3JcbiAgICogd2hpY2ggdG8gY29sbGVjdCBleHBvcnRzLlxuICAgKlxuICAgKiBAcmV0dXJucyBhIG1hcCBvZiBgRGVjbGFyYXRpb25gcyBmb3IgdGhlIG1vZHVsZSdzIGV4cG9ydHMsIGJ5IG5hbWUuXG4gICAqL1xuICBnZXRFeHBvcnRzT2ZNb2R1bGUobW9kdWxlOiB0cy5Ob2RlKTogTWFwPHN0cmluZywgRGVjbGFyYXRpb24+fG51bGw7XG5cbiAgLyoqXG4gICAqIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIG5vZGUgYWN0dWFsbHkgcmVwcmVzZW50cyBhIGNsYXNzLlxuICAgKi9cbiAgaXNDbGFzcyhub2RlOiB0cy5Ob2RlKTogbm9kZSBpcyBDbGFzc0RlY2xhcmF0aW9uO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGdpdmVuIGRlY2xhcmF0aW9uLCB3aGljaCBzaG91bGQgYmUgYSBjbGFzcywgaGFzIGEgYmFzZSBjbGFzcy5cbiAgICpcbiAgICogQHBhcmFtIGNsYXp6IGEgYENsYXNzRGVjbGFyYXRpb25gIHJlcHJlc2VudGluZyB0aGUgY2xhc3Mgb3ZlciB3aGljaCB0byByZWZsZWN0LlxuICAgKi9cbiAgaGFzQmFzZUNsYXNzKGNsYXp6OiBDbGFzc0RlY2xhcmF0aW9uKTogYm9vbGVhbjtcblxuICAvKipcbiAgICogR2V0IGFuIGV4cHJlc3Npb24gcmVwcmVzZW50aW5nIHRoZSBiYXNlIGNsYXNzIChpZiBhbnkpIG9mIHRoZSBnaXZlbiBgY2xhenpgLlxuICAgKlxuICAgKiBUaGlzIGV4cHJlc3Npb24gaXMgbW9zdCBjb21tb25seSBhbiBJZGVudGlmaWVyLCBidXQgaXMgcG9zc2libGUgdG8gaW5oZXJpdCBmcm9tIGEgbW9yZSBkeW5hbWljXG4gICAqIGV4cHJlc3Npb24uXG4gICAqXG4gICAqIEBwYXJhbSBjbGF6eiB0aGUgY2xhc3Mgd2hvc2UgYmFzZSB3ZSB3YW50IHRvIGdldC5cbiAgICovXG4gIGdldEJhc2VDbGFzc0V4cHJlc3Npb24oY2xheno6IENsYXNzRGVjbGFyYXRpb24pOiB0cy5FeHByZXNzaW9ufG51bGw7XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbnVtYmVyIG9mIGdlbmVyaWMgdHlwZSBwYXJhbWV0ZXJzIG9mIGEgZ2l2ZW4gY2xhc3MuXG4gICAqXG4gICAqIEBwYXJhbSBjbGF6eiBhIGBDbGFzc0RlY2xhcmF0aW9uYCByZXByZXNlbnRpbmcgdGhlIGNsYXNzIG92ZXIgd2hpY2ggdG8gcmVmbGVjdC5cbiAgICpcbiAgICogQHJldHVybnMgdGhlIG51bWJlciBvZiB0eXBlIHBhcmFtZXRlcnMgb2YgdGhlIGNsYXNzLCBpZiBrbm93biwgb3IgYG51bGxgIGlmIHRoZSBkZWNsYXJhdGlvblxuICAgKiBpcyBub3QgYSBjbGFzcyBvciBoYXMgYW4gdW5rbm93biBudW1iZXIgb2YgdHlwZSBwYXJhbWV0ZXJzLlxuICAgKi9cbiAgZ2V0R2VuZXJpY0FyaXR5T2ZDbGFzcyhjbGF6ejogQ2xhc3NEZWNsYXJhdGlvbik6IG51bWJlcnxudWxsO1xuXG4gIC8qKlxuICAgKiBGaW5kIHRoZSBhc3NpZ25lZCB2YWx1ZSBvZiBhIHZhcmlhYmxlIGRlY2xhcmF0aW9uLlxuICAgKlxuICAgKiBOb3JtYWxseSB0aGlzIHdpbGwgYmUgdGhlIGluaXRpYWxpemVyIG9mIHRoZSBkZWNsYXJhdGlvbiwgYnV0IHdoZXJlIHRoZSB2YXJpYWJsZSBpc1xuICAgKiBub3QgYSBgY29uc3RgIHdlIG1heSBuZWVkIHRvIGxvb2sgZWxzZXdoZXJlIGZvciB0aGUgdmFyaWFibGUncyB2YWx1ZS5cbiAgICpcbiAgICogQHBhcmFtIGRlY2xhcmF0aW9uIGEgVHlwZVNjcmlwdCB2YXJpYWJsZSBkZWNsYXJhdGlvbiwgd2hvc2UgdmFsdWUgd2Ugd2FudC5cbiAgICogQHJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSB2YXJpYWJsZSwgYXMgYSBUeXBlU2NyaXB0IGV4cHJlc3Npb24gbm9kZSwgb3IgYHVuZGVmaW5lZGBcbiAgICogaWYgdGhlIHZhbHVlIGNhbm5vdCBiZSBjb21wdXRlZC5cbiAgICovXG4gIGdldFZhcmlhYmxlVmFsdWUoZGVjbGFyYXRpb246IHRzLlZhcmlhYmxlRGVjbGFyYXRpb24pOiB0cy5FeHByZXNzaW9ufG51bGw7XG5cbiAgLyoqXG4gICAqIFRha2UgYW4gZXhwb3J0ZWQgZGVjbGFyYXRpb24gKG1heWJlIGEgY2xhc3MgZG93bi1sZXZlbGVkIHRvIGEgdmFyaWFibGUpIGFuZCBsb29rIHVwIHRoZVxuICAgKiBkZWNsYXJhdGlvbiBvZiBpdHMgdHlwZSBpbiBhIHNlcGFyYXRlIC5kLnRzIHRyZWUuXG4gICAqXG4gICAqIFRoaXMgZnVuY3Rpb24gaXMgYWxsb3dlZCB0byByZXR1cm4gYG51bGxgIGlmIHRoZSBjdXJyZW50IGNvbXBpbGF0aW9uIHVuaXQgZG9lcyBub3QgaGF2ZSBhXG4gICAqIHNlcGFyYXRlIC5kLnRzIHRyZWUuIFdoZW4gY29tcGlsaW5nIFR5cGVTY3JpcHQgY29kZSB0aGlzIGlzIGFsd2F5cyB0aGUgY2FzZSwgc2luY2UgLmQudHMgZmlsZXNcbiAgICogYXJlIHByb2R1Y2VkIG9ubHkgZHVyaW5nIHRoZSBlbWl0IG9mIHN1Y2ggYSBjb21waWxhdGlvbi4gV2hlbiBjb21waWxpbmcgLmpzIGNvZGUsIGhvd2V2ZXIsXG4gICAqIHRoZXJlIGlzIGZyZXF1ZW50bHkgYSBwYXJhbGxlbCAuZC50cyB0cmVlIHdoaWNoIHRoaXMgbWV0aG9kIGV4cG9zZXMuXG4gICAqXG4gICAqIE5vdGUgdGhhdCB0aGUgYHRzLkRlY2xhcmF0aW9uYCByZXR1cm5lZCBmcm9tIHRoaXMgZnVuY3Rpb24gbWF5IG5vdCBiZSBmcm9tIHRoZSBzYW1lXG4gICAqIGB0cy5Qcm9ncmFtYCBhcyB0aGUgaW5wdXQgZGVjbGFyYXRpb24uXG4gICAqL1xuICBnZXREdHNEZWNsYXJhdGlvbihkZWNsYXJhdGlvbjogRGVjbGFyYXRpb25Ob2RlKTogdHMuRGVjbGFyYXRpb258bnVsbDtcblxuICAvKipcbiAgICogR2V0IGEgYHRzLklkZW50aWZpZXJgIGZvciBhIGdpdmVuIGBDbGFzc0RlY2xhcmF0aW9uYCB3aGljaCBjYW4gYmUgdXNlZCB0byByZWZlciB0byB0aGUgY2xhc3NcbiAgICogd2l0aGluIGl0cyBkZWZpbml0aW9uIChzdWNoIGFzIGluIHN0YXRpYyBmaWVsZHMpLlxuICAgKlxuICAgKiBUaGlzIGNhbiBkaWZmZXIgZnJvbSBgY2xhenoubmFtZWAgd2hlbiBuZ2NjIHJ1bnMgb3ZlciBFUzUgY29kZSwgc2luY2UgdGhlIGNsYXNzIG1heSBoYXZlIGFcbiAgICogZGlmZmVyZW50IG5hbWUgd2l0aGluIGl0cyBJSUZFIHdyYXBwZXIgdGhhbiBpdCBkb2VzIGV4dGVybmFsbHkuXG4gICAqL1xuICBnZXRJbnRlcm5hbE5hbWVPZkNsYXNzKGNsYXp6OiBDbGFzc0RlY2xhcmF0aW9uKTogdHMuSWRlbnRpZmllcjtcblxuICAvKipcbiAgICogR2V0IGEgYHRzLklkZW50aWZpZXJgIGZvciBhIGdpdmVuIGBDbGFzc0RlY2xhcmF0aW9uYCB3aGljaCBjYW4gYmUgdXNlZCB0byByZWZlciB0byB0aGUgY2xhc3NcbiAgICogZnJvbSBzdGF0ZW1lbnRzIHRoYXQgYXJlIFwiYWRqYWNlbnRcIiwgYW5kIGNvbmNlcHR1YWxseSB0aWdodGx5IGJvdW5kLCB0byB0aGUgY2xhc3MgYnV0IG5vdFxuICAgKiBhY3R1YWxseSBpbnNpZGUgaXQuXG4gICAqXG4gICAqIFNpbWlsYXIgdG8gYGdldEludGVybmFsTmFtZU9mQ2xhc3MoKWAsIHRoaXMgbmFtZSBjYW4gZGlmZmVyIGZyb20gYGNsYXp6Lm5hbWVgIHdoZW4gbmdjYyBydW5zXG4gICAqIG92ZXIgRVM1IGNvZGUsIHNpbmNlIHRoZXNlIFwiYWRqYWNlbnRcIiBzdGF0ZW1lbnRzIG5lZWQgdG8gZXhpc3QgaW4gdGhlIElJRkUgd2hlcmUgdGhlIGNsYXNzIG1heVxuICAgKiBoYXZlIGEgZGlmZmVyZW50IG5hbWUgdGhhbiBpdCBkb2VzIGV4dGVybmFsbHkuXG4gICAqL1xuICBnZXRBZGphY2VudE5hbWVPZkNsYXNzKGNsYXp6OiBDbGFzc0RlY2xhcmF0aW9uKTogdHMuSWRlbnRpZmllcjtcblxuICAvKipcbiAgICogUmV0dXJucyBgdHJ1ZWAgaWYgYSBkZWNsYXJhdGlvbiBpcyBleHBvcnRlZCBmcm9tIHRoZSBtb2R1bGUgaW4gd2hpY2ggaXQncyBkZWZpbmVkLlxuICAgKlxuICAgKiBOb3QgYWxsIG1lY2hhbmlzbXMgYnkgd2hpY2ggYSBkZWNsYXJhdGlvbiBpcyBleHBvcnRlZCBjYW4gYmUgc3RhdGljYWxseSBkZXRlY3RlZCwgZXNwZWNpYWxseVxuICAgKiB3aGVuIHByb2Nlc3NpbmcgYWxyZWFkeSBjb21waWxlZCBKYXZhU2NyaXB0LiBBIGBmYWxzZWAgcmVzdWx0IGRvZXMgbm90IGluZGljYXRlIHRoYXQgdGhlXG4gICAqIGRlY2xhcmF0aW9uIGlzIG5ldmVyIHZpc2libGUgb3V0c2lkZSBpdHMgbW9kdWxlLCBvbmx5IHRoYXQgaXQgd2FzIG5vdCBleHBvcnRlZCB2aWEgb25lIG9mIHRoZVxuICAgKiBleHBvcnQgbWVjaGFuaXNtcyB0aGF0IHRoZSBgUmVmbGVjdGlvbkhvc3RgIGlzIGNhcGFibGUgb2Ygc3RhdGljYWxseSBjaGVja2luZy5cbiAgICovXG4gIGlzU3RhdGljYWxseUV4cG9ydGVkKGRlY2w6IHRzLk5vZGUpOiBib29sZWFuO1xufVxuIl19
@@ -29,7 +29,7 @@ export declare class TypeScriptReflectionHost implements ReflectionHost {
29
29
  getDtsDeclaration(_: ClassDeclaration): ts.Declaration | null;
30
30
  getInternalNameOfClass(clazz: ClassDeclaration): ts.Identifier;
31
31
  getAdjacentNameOfClass(clazz: ClassDeclaration): ts.Identifier;
32
- isStaticallyExported(clazz: ClassDeclaration): boolean;
32
+ isStaticallyExported(decl: ts.Node): boolean;
33
33
  protected getDirectImportOfIdentifier(id: ts.Identifier): Import | null;
34
34
  /**
35
35
  * Try to get the import info for this identifier as though it is a namespaced import.
@@ -57,9 +57,9 @@ export declare class TypeScriptReflectionHost implements ReflectionHost {
57
57
  private _reflectDecorator;
58
58
  private _reflectMember;
59
59
  /**
60
- * Get the set of classes declared in `file` which are exported.
60
+ * Get the set of declarations declared in `file` which are exported.
61
61
  */
62
- private getLocalExportedClassesOfSourceFile;
62
+ private getLocalExportedDeclarationsOfSourceFile;
63
63
  }
64
64
  export declare function reflectNameOfDeclaration(decl: ts.Declaration): string | null;
65
65
  export declare function reflectIdentifierOfDeclaration(decl: ts.Declaration): ts.Identifier | null;