@decaf-ts/for-angular 0.0.6 → 0.0.8

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.
@@ -312,4 +312,4 @@ export class NgxFormService {
312
312
  }
313
313
  }
314
314
  }
315
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTmd4Rm9ybVNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2VuZ2luZS9OZ3hGb3JtU2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFtQixlQUFlLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRXZILE9BQU8sRUFBbUIsV0FBVyxFQUFFLFNBQVMsRUFBZSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRyxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUd0RDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFDRztBQUNILE1BQU0sT0FBTyxjQUFjO2FBQ1YsYUFBUSxHQUFHLElBQUksT0FBTyxFQUFvQyxDQUFDO2FBQzNELGlCQUFZLEdBQUcsSUFBSSxHQUFHLEVBQXFCLENBQUM7SUFFM0Q7Ozs7OztPQU1HO0lBQ0gsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFjLEVBQUUsU0FBb0I7UUFDckQsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7WUFDL0IsTUFBTSxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsTUFBTSwwQkFBMEIsQ0FBQyxDQUFDO1FBQzVFLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBYztRQUNsQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ssTUFBTSxDQUFDLGtCQUFr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RUQ7Ozs7O09BS0c7SUFDSCxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQXdCLEVBQUUsS0FBc0I7UUFDOUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILE1BQU0sQ0FBQyxVQUFVLENBQUMsT0FBd0I7UUFDeEMsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBb0I7UUFDL0IsS0FBSyxNQUFNLEdBQUcsSUFBSSxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDckMsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN4QyxJQUFJLENBQUMsQ0FBQyxPQUFPLFlBQVksV0FBVyxDQUFDLEVBQUUsQ0FBQztnQkFDdEMsY0FBYyxDQUFDLEtBQUssQ0FBQyxPQUFvQixDQUFDLENBQUM7Z0JBQzNDLFNBQVM7WUFDWCxDQUFDO1lBRUQsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLGNBQWMsQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM3RCxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7Z0JBQ2pDLE9BQU8sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDOUIsT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3pCLE9BQU8sQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUMxQixPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hCLE9BQU8sQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQ25DLENBQUM7SUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXNjYXBlSHRtbCwgRmllbGRQcm9wZXJ0aWVzLCBIVE1MNUNoZWNrVHlwZXMsIEhUTUw1SW5wdXRUeXBlcywgcGFyc2VUb051bWJlciB9IGZyb20gJ0BkZWNhZi10cy91aS1kZWNvcmF0b3JzJztcbmltcG9ydCB7ICBDb21wb25lbnRDb25maWcsIENvbXBvbmVudElucHV0LCBGaWVsZFVwZGF0ZU1vZGUsIEZvcm1QYXJlbnRHcm91cCB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0b3JGbiwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGlzVmFsaWREYXRlLCBwYXJzZURhdGUsIFZhbGlkYXRpb24gfSBmcm9tICdAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb24nO1xuaW1wb3J0IHsgVmFsaWRhdG9yRmFjdG9yeSB9IGZyb20gJy4vVmFsaWRhdG9yRmFjdG9yeSc7XG5cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gU2VydmljZSBmb3IgbWFuYWdpbmcgQW5ndWxhciBmb3JtcyBhbmQgZm9ybSBjb250cm9scy5cbiAqIEBzdW1tYXJ5IFRoZSBOZ3hGb3JtU2VydmljZSBwcm92aWRlcyB1dGlsaXR5IG1ldGhvZHMgZm9yIGNyZWF0aW5nLCBtYW5hZ2luZywgYW5kIHZhbGlkYXRpbmcgQW5ndWxhciBmb3JtcyBhbmQgZm9ybSBjb250cm9scy4gSXQgaW5jbHVkZXMgZnVuY3Rpb25hbGl0eSBmb3IgcmVnaXN0ZXJpbmcgZm9ybXMsIGFkZGluZyBjb250cm9scywgdmFsaWRhdGluZyBmaWVsZHMsIGFuZCBoYW5kbGluZyBmb3JtIGRhdGEuXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0ge1dlYWtNYXA8QWJzdHJhY3RDb250cm9sLCBGaWVsZFByb3BlcnRpZXM+fSBjb250cm9scyAtIEEgV2Vha01hcCB0byBzdG9yZSBjb250cm9sIHByb3BlcnRpZXMuXG4gKiBAcGFyYW0ge01hcDxzdHJpbmcsIEZvcm1Hcm91cD59IGZvcm1SZWdpc3RyeSAtIEEgTWFwIHRvIHN0b3JlIHJlZ2lzdGVyZWQgZm9ybXMuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENyZWF0aW5nIGEgZm9ybSBmcm9tIGNvbXBvbmVudHNcbiAqIGNvbnN0IGNvbXBvbmVudHMgPSBbXG4gKiAgIHsgaW5wdXRzOiB7IG5hbWU6ICd1c2VybmFtZScsIHR5cGU6ICd0ZXh0JywgcmVxdWlyZWQ6IHRydWUgfSB9LFxuICogICB7IGlucHV0czogeyBuYW1lOiAncGFzc3dvcmQnLCB0eXBlOiAncGFzc3dvcmQnLCBtaW5MZW5ndGg6IDggfSB9XG4gKiBdO1xuICogY29uc3QgZm9ybSA9IE5neEZvcm1TZXJ2aWNlLmNyZWF0ZUZvcm1Gcm9tQ29tcG9uZW50cygnbG9naW5Gb3JtJywgY29tcG9uZW50cywgdHJ1ZSk7XG4gKlxuICogLy8gVmFsaWRhdGluZyBmaWVsZHNcbiAqIE5neEZvcm1TZXJ2aWNlLnZhbGlkYXRlRmllbGRzKGZvcm0pO1xuICpcbiAqIC8vIEdldHRpbmcgZm9ybSBkYXRhXG4gKiBjb25zdCBmb3JtRGF0YSA9IE5neEZvcm1TZXJ2aWNlLmdldEZvcm1EYXRhKGZvcm0pO1xuICpcbiAqIEBtZXJtYWlkXG4gKiBzZXF1ZW5jZURpYWdyYW1cbiAqICAgcGFydGljaXBhbnQgQyBhcyBDb21wb25lbnRcbiAqICAgcGFydGljaXBhbnQgTkZTIGFzIE5neEZvcm1TZXJ2aWNlXG4gKiAgIHBhcnRpY2lwYW50IEFGIGFzIEFuZ3VsYXIgRm9ybXNcbiAqICAgQy0+Pk5GUzogY3JlYXRlRm9ybUZyb21Db21wb25lbnRzKClcbiAqICAgTkZTLT4+QUY6IG5ldyBGb3JtR3JvdXAoKVxuICogICBORlMtPj5ORlM6IGFkZEZvcm1Db250cm9sKClcbiAqICAgTkZTLT4+QUY6IGFkZENvbnRyb2woKVxuICogICBORlMtLT4+QzogUmV0dXJuIEZvcm1Hcm91cFxuICogICBDLT4+TkZTOiB2YWxpZGF0ZUZpZWxkcygpXG4gKiAgIE5GUy0+PkFGOiBtYXJrQXNUb3VjaGVkKCksIG1hcmtBc0RpcnR5KCksIHVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKVxuICogICBDLT4+TkZTOiBnZXRGb3JtRGF0YSgpXG4gKiAgIE5GUy0+PkFGOiBHZXQgY29udHJvbCB2YWx1ZXNcbiAqICAgTkZTLS0+PkM6IFJldHVybiBmb3JtIGRhdGFcbiAqL1xuZXhwb3J0IGNsYXNzIE5neEZvcm1TZXJ2aWNlIHtcbiAgcHJpdmF0ZSBzdGF0aWMgY29udHJvbHMgPSBuZXcgV2Vha01hcDxBYnN0cmFjdENvbnRyb2wsIEZpZWxkUHJvcGVydGllcz4oKTtcbiAgcHJpdmF0ZSBzdGF0aWMgZm9ybVJlZ2lzdHJ5ID0gbmV3IE1hcDxzdHJpbmcsIEZvcm1Hcm91cD4oKTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEFkZHMgYSBmb3JtIHRvIHRoZSByZWdpc3RyeS5cbiAgICogQHN1bW1hcnkgUmVnaXN0ZXJzIGEgRm9ybUdyb3VwIHdpdGggYSB1bmlxdWUgaWRlbnRpZmllci4gVGhyb3dzIGFuIGVycm9yIGlmIHRoZSBpZGVudGlmaWVyIGlzIGFscmVhZHkgaW4gdXNlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZm9ybUlkIC0gVGhlIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgZm9ybS5cbiAgICogQHBhcmFtIHtGb3JtR3JvdXB9IGZvcm1Hcm91cCAtIFRoZSBGb3JtR3JvdXAgdG8gYmUgcmVnaXN0ZXJlZC5cbiAgICogQHRocm93cyB7RXJyb3J9IElmIGEgRm9ybUdyb3VwIHdpdGggdGhlIGdpdmVuIGlkIGlzIGFscmVhZHkgcmVnaXN0ZXJlZC5cbiAgICovXG4gIHN0YXRpYyBhZGRSZWdpc3RyeShmb3JtSWQ6IHN0cmluZywgZm9ybUdyb3VwOiBGb3JtR3JvdXApOiB2b2lkIHtcbiAgICBpZiAodGhpcy5mb3JtUmVnaXN0cnkuaGFzKGZvcm1JZCkpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEEgRm9ybUdyb3VwIHdpdGggaWQgJyR7Zm9ybUlkfScgaXMgYWxyZWFkeSByZWdpc3RlcmVkLmApO1xuICAgIHRoaXMuZm9ybVJlZ2lzdHJ5LnNldChmb3JtSWQsIGZvcm1Hcm91cCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJlbW92ZXMgYSBmb3JtIGZyb20gdGhlIHJlZ2lzdHJ5LlxuICAgKiBAc3VtbWFyeSBEZWxldGVzIGEgRm9ybUdyb3VwIGZyb20gdGhlIHJlZ2lzdHJ5IHVzaW5nIGl0cyB1bmlxdWUgaWRlbnRpZmllci5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZvcm1JZCAtIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgZm9ybSB0byBiZSByZW1vdmVkLlxuICAgKi9cbiAgc3RhdGljIHJlbW92ZVJlZ2lzdHJ5KGZvcm1JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtUmVnaXN0cnkuZGVsZXRlKGZvcm1JZCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJlc29sdmVzIHRoZSBwYXJlbnQgZ3JvdXAgYW5kIGNvbnRyb2wgbmFtZSBmcm9tIGEgcGF0aC5cbiAgICogQHN1bW1hcnkgVHJhdmVyc2VzIHRoZSBmb3JtIGdyb3VwIHN0cnVjdHVyZSB0byBmaW5kIHRoZSBwYXJlbnQgZ3JvdXAgYW5kIGNvbnRyb2wgbmFtZSBmb3IgYSBnaXZlbiBwYXRoLlxuICAgKiBAcGFyYW0ge0Zvcm1Hcm91cH0gZm9ybUdyb3VwIC0gVGhlIHJvb3QgRm9ybUdyb3VwLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIFRoZSBwYXRoIHRvIHRoZSBjb250cm9sLlxuICAgKiBAcmV0dXJuIHtGb3JtUGFyZW50R3JvdXB9IEEgdHVwbGUgY29udGFpbmluZyB0aGUgcGFyZW50IEZvcm1Hcm91cCBhbmQgdGhlIGNvbnRyb2wgbmFtZS5cbiAgICovXG4gIHByaXZhdGUgc3RhdGljIHJlc29sdmVQYXJlbnRHcm91cChmb3JtR3JvdXA6IEZvcm1Hcm91cCwgcGF0aDogc3RyaW5nKTogRm9ybVBhcmVudEdyb3VwIHtcbiAgICBjb25zdCBwYXJ0cyA9IHBhdGguc3BsaXQoJy4nKTtcbiAgICBjb25zdCBjb250cm9sTmFtZSA9IHBhcnRzLnBvcCgpIGFzIHN0cmluZztcbiAgICBsZXQgY3VycmVudEdyb3VwID0gZm9ybUdyb3VwO1xuICAgIGZvciAoY29uc3QgcGFydCBvZiBwYXJ0cykge1xuICAgICAgaWYgKCFjdXJyZW50R3JvdXAuZ2V0KHBhcnQpKSB7XG4gICAgICAgIGN1cnJlbnRHcm91cC5hZGRDb250cm9sKHBhcnQsIG5ldyBGb3JtR3JvdXAoe30pKTtcbiAgICAgIH1cbiAgICAgIGN1cnJlbnRHcm91cCA9IGN1cnJlbnRHcm91cC5nZXQocGFydCkgYXMgRm9ybUdyb3VwO1xuICAgIH1cbiAgICByZXR1cm4gW2N1cnJlbnRHcm91cCwgY29udHJvbE5hbWVdO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBBZGRzIGEgZm9ybSBjb250cm9sIHRvIGEgZm9ybSBncm91cC5cbiAgICogQHN1bW1hcnkgQ3JlYXRlcyBhbmQgYWRkcyBhIGZvcm0gY29udHJvbCB0byB0aGUgc3BlY2lmaWVkIGZvcm0gZ3JvdXAgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGNvbXBvbmVudCBwcm9wZXJ0aWVzLlxuICAgKiBAcGFyYW0ge0Zvcm1Hcm91cH0gZm9ybUdyb3VwIC0gVGhlIGZvcm0gZ3JvdXAgdG8gYWRkIHRoZSBjb250cm9sIHRvLlxuICAgKiBAcGFyYW0ge0NvbXBvbmVudElucHV0fSBjb21wb25lbnRQcm9wcyAtIFRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBjb21wb25lbnQgdG8gY3JlYXRlIHRoZSBjb250cm9sIGZyb20uXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBhZGRGb3JtQ29udHJvbChmb3JtR3JvdXA6IEZvcm1Hcm91cCwgY29tcG9uZW50UHJvcHM6IENvbXBvbmVudElucHV0KTogdm9pZCB7XG5cbiAgICBjb25zdCB7IG5hbWUsIGNoaWxkT2YgfSA9IGNvbXBvbmVudFByb3BzO1xuICAgIGNvbnN0IGZ1bGxQYXRoID0gY2hpbGRPZiA/IGAke2NoaWxkT2Z9LiR7bmFtZX1gIDogbmFtZTtcbiAgICBjb25zdCBbcGFyZW50R3JvdXAsIGNvbnRyb2xOYW1lXSA9IHRoaXMucmVzb2x2ZVBhcmVudEdyb3VwKGZvcm1Hcm91cCwgZnVsbFBhdGgpO1xuXG4gICAgaWYgKCFwYXJlbnRHcm91cC5nZXQoY29udHJvbE5hbWUpKSB7XG4gICAgICBjb25zdCBjb250cm9sID0gTmd4Rm9ybVNlcnZpY2UuZnJvbVByb3BzKFxuICAgICAgICBjb21wb25lbnRQcm9wcyxcbiAgICAgICAgY29tcG9uZW50UHJvcHMudXBkYXRlTW9kZSB8fCAnY2hhbmdlJyxcbiAgICAgICk7XG4gICAgICBOZ3hGb3JtU2VydmljZS5yZWdpc3Rlcihjb250cm9sLCBjb21wb25lbnRQcm9wcyk7XG4gICAgICBwYXJlbnRHcm91cC5hZGRDb250cm9sKGNvbnRyb2xOYW1lLCBjb250cm9sKTtcbiAgICB9XG5cbiAgICBjb21wb25lbnRQcm9wc1snZm9ybUdyb3VwJ10gPSBwYXJlbnRHcm91cDtcbiAgICBjb21wb25lbnRQcm9wc1snZm9ybUNvbnRyb2wnXSA9IHBhcmVudEdyb3VwLmdldChjb250cm9sTmFtZSkgYXMgRm9ybUNvbnRyb2w7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJldHJpZXZlcyBhIGNvbnRyb2wgZnJvbSBhIHJlZ2lzdGVyZWQgZm9ybS5cbiAgICogQHN1bW1hcnkgRmluZHMgYW5kIHJldHVybnMgYW4gQWJzdHJhY3RDb250cm9sIGZyb20gYSByZWdpc3RlcmVkIGZvcm0gdXNpbmcgdGhlIGZvcm0gaWQgYW5kIG9wdGlvbmFsIHBhdGguXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtSWQgLSBUaGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIGZvcm0uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcGF0aF0gLSBUaGUgcGF0aCB0byB0aGUgY29udHJvbCB3aXRoaW4gdGhlIGZvcm0uXG4gICAqIEByZXR1cm4ge0Fic3RyYWN0Q29udHJvbH0gVGhlIHJlcXVlc3RlZCBBYnN0cmFjdENvbnRyb2wuXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgZm9ybSBpcyBub3QgZm91bmQgaW4gdGhlIHJlZ2lzdHJ5IG9yIHRoZSBjb250cm9sIGlzIG5vdCBmb3VuZCBpbiB0aGUgZm9ybS5cbiAgICovXG4gIHN0YXRpYyBnZXRDb250cm9sRnJvbUZvcm0oZm9ybUlkOiBzdHJpbmcsIHBhdGg/OiBzdHJpbmcpOiBBYnN0cmFjdENvbnRyb2wge1xuICAgIGNvbnN0IGZvcm0gPSB0aGlzLmZvcm1SZWdpc3RyeS5nZXQoZm9ybUlkKTtcbiAgICBpZiAoIWZvcm0pXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZvcm0gd2l0aCBpZCAnJHtmb3JtSWR9JyBub3QgZm91bmQgaW4gdGhlIHJlZ2lzdHJ5LmApO1xuXG4gICAgaWYgKCFwYXRoKVxuICAgICAgcmV0dXJuIGZvcm07XG5cbiAgICBjb25zdCBjb250cm9sID0gZm9ybS5nZXQocGF0aCk7XG4gICAgaWYgKCFjb250cm9sKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb250cm9sIHdpdGggcGF0aCAnJHtwYXRofScgbm90IGZvdW5kIGluIGZvcm0gJyR7Zm9ybUlkfScuYCk7XG4gICAgcmV0dXJuIGNvbnRyb2w7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYSBmb3JtIGZyb20gY29tcG9uZW50IGNvbmZpZ3VyYXRpb25zLlxuICAgKiBAc3VtbWFyeSBHZW5lcmF0ZXMgYSBGb3JtR3JvdXAgYmFzZWQgb24gYW4gYXJyYXkgb2YgY29tcG9uZW50IGNvbmZpZ3VyYXRpb25zIGFuZCBvcHRpb25hbGx5IHJlZ2lzdGVycyBpdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGlkIC0gVGhlIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgZm9ybS5cbiAgICogQHBhcmFtIHtDb21wb25lbnRDb25maWdbXX0gY29tcG9uZW50cyAtIEFuIGFycmF5IG9mIGNvbXBvbmVudCBjb25maWd1cmF0aW9ucy5cbiAgICogQHBhcmFtIHtib29sZWFufSBbcmVnaXN0cnk9ZmFsc2VdIC0gV2hldGhlciB0byByZWdpc3RlciB0aGUgY3JlYXRlZCBmb3JtLlxuICAgKiBAcmV0dXJuIHtGb3JtR3JvdXB9IFRoZSBjcmVhdGVkIEZvcm1Hcm91cC5cbiAgICovXG4gIHN0YXRpYyBjcmVhdGVGb3JtRnJvbUNvbXBvbmVudHMoaWQ6IHN0cmluZywgY29tcG9uZW50czogQ29tcG9uZW50Q29uZmlnW10sIHJlZ2lzdHJ5ID0gZmFsc2UpOiBGb3JtR3JvdXAge1xuICAgIGNvbnN0IGZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcbiAgICBjb21wb25lbnRzLmZvckVhY2goY29tcG9uZW50ID0+IHtcbiAgICAgIHRoaXMuYWRkRm9ybUNvbnRyb2woZm9ybSwgY29tcG9uZW50LmlucHV0cyk7XG4gICAgfSk7XG5cbiAgICBpZiAocmVnaXN0cnkpXG4gICAgICB0aGlzLmFkZFJlZ2lzdHJ5KGlkLCBmb3JtKTtcblxuICAgIHJldHVybiBmb3JtO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBBZGRzIGEgY29udHJvbCB0byBhIGZvcm0gYmFzZWQgb24gY29tcG9uZW50IHByb3BlcnRpZXMuXG4gICAqIEBzdW1tYXJ5IENyZWF0ZXMgYW5kIGFkZHMgYSBmb3JtIGNvbnRyb2wgdG8gYSBmb3JtIChleGlzdGluZyBvciBuZXcpIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBjb21wb25lbnQgcHJvcGVydGllcy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGlkIC0gVGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBmb3JtLlxuICAgKiBAcGFyYW0ge0ZpZWxkUHJvcGVydGllc30gY29tcG9uZW50UHJvcGVydGllcyAtIFRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBjb21wb25lbnQgdG8gY3JlYXRlIHRoZSBjb250cm9sIGZyb20uXG4gICAqIEByZXR1cm4ge0Fic3RyYWN0Q29udHJvbH0gVGhlIGZvcm0gb3IgY3JlYXRlZCBjb250cm9sLlxuICAgKi9cbiAgc3RhdGljIGFkZENvbnRyb2xGcm9tUHJvcHMoaWQ6IHN0cmluZywgY29tcG9uZW50UHJvcGVydGllczogRmllbGRQcm9wZXJ0aWVzKTogQWJzdHJhY3RDb250cm9sIHtcbiAgICBjb25zdCBmb3JtID0gdGhpcy5mb3JtUmVnaXN0cnkuZ2V0KGlkKSA/PyBuZXcgRm9ybUdyb3VwKHt9KTtcbiAgICBpZiAoIXRoaXMuZm9ybVJlZ2lzdHJ5LmhhcyhpZCkpXG4gICAgICB0aGlzLmFkZFJlZ2lzdHJ5KGlkLCBmb3JtKTtcblxuICAgIGlmIChjb21wb25lbnRQcm9wZXJ0aWVzLnBhdGgpXG4gICAgICB0aGlzLmFkZEZvcm1Db250cm9sKGZvcm0sIGNvbXBvbmVudFByb3BlcnRpZXMpO1xuXG4gICAgcmV0dXJuIGZvcm07XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJldHJpZXZlcyBmb3JtIGRhdGEgZnJvbSBhIEZvcm1Hcm91cC5cbiAgICogQHN1bW1hcnkgRXh0cmFjdHMgYW5kIHByb2Nlc3NlcyB0aGUgZGF0YSBmcm9tIGEgRm9ybUdyb3VwLCBoYW5kbGluZyBkaWZmZXJlbnQgaW5wdXQgdHlwZXMgYW5kIG5lc3RlZCBmb3JtIGdyb3Vwcy5cbiAgICogQHBhcmFtIHtGb3JtR3JvdXB9IGZvcm1Hcm91cCAtIFRoZSBGb3JtR3JvdXAgdG8gZXh0cmFjdCBkYXRhIGZyb20uXG4gICAqIEByZXR1cm4ge1JlY29yZDxzdHJpbmcsIHVua25vd24+fSBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgZm9ybSBkYXRhLlxuICAgKi9cbiAgc3RhdGljIGdldEZvcm1EYXRhKGZvcm1Hcm91cDogRm9ybUdyb3VwKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIGNvbnN0IGRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gICAgZm9yIChjb25zdCBrZXkgaW4gZm9ybUdyb3VwLmNvbnRyb2xzKSB7XG4gICAgICBjb25zdCBjb250cm9sID0gZm9ybUdyb3VwLmNvbnRyb2xzW2tleV07XG4gICAgICBpZiAoIShjb250cm9sIGluc3RhbmNlb2YgRm9ybUNvbnRyb2wpKSB7XG4gICAgICAgIGRhdGFba2V5XSA9IE5neEZvcm1TZXJ2aWNlLmdldEZvcm1EYXRhKGNvbnRyb2wgYXMgRm9ybUdyb3VwKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHByb3BzID0gTmd4Rm9ybVNlcnZpY2UuZ2V0UHJvcHNGcm9tQ29udHJvbChjb250cm9sKTtcbiAgICAgIGxldCB2YWx1ZSA9IGNvbnRyb2wudmFsdWU7XG4gICAgICBpZiAoIUhUTUw1Q2hlY2tUeXBlcy5pbmNsdWRlcyhwcm9wc1sndHlwZSddKSkge1xuICAgICAgICBzd2l0Y2ggKHByb3BzWyd0eXBlJ10pIHtcbiAgICAgICAgICBjYXNlIEhUTUw1SW5wdXRUeXBlcy5OVU1CRVI6XG4gICAgICAgICAgICB2YWx1ZSA9IHBhcnNlVG9OdW1iZXIodmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBIVE1MNUlucHV0VHlwZXMuREFURTpcbiAgICAgICAgICBjYXNlIEhUTUw1SW5wdXRUeXBlcy5EQVRFVElNRV9MT0NBTDpcbiAgICAgICAgICAgIHZhbHVlID0gbmV3IERhdGUodmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHZhbHVlID0gZXNjYXBlSHRtbCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGRhdGFba2V5XSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBWYWxpZGF0ZXMgZmllbGRzIGluIGEgZm9ybSBjb250cm9sIG9yIGZvcm0gZ3JvdXAuXG4gICAqIEBzdW1tYXJ5IFJlY3Vyc2l2ZWx5IHZhbGlkYXRlcyBhbGwgZmllbGRzIGluIGEgZm9ybSBjb250cm9sIG9yIGZvcm0gZ3JvdXAsIG1hcmtpbmcgdGhlbSBhcyB0b3VjaGVkIGFuZCBkaXJ0eS5cbiAgICogQHBhcmFtIHtBYnN0cmFjdENvbnRyb2x9IGNvbnRyb2wgLSBUaGUgY29udHJvbCBvciBmb3JtIGdyb3VwIHRvIHZhbGlkYXRlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3BhdGhdIC0gVGhlIHBhdGggdG8gdGhlIGNvbnRyb2wgd2l0aGluIHRoZSBmb3JtLlxuICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIGFsbCBmaWVsZHMgYXJlIHZhbGlkLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiBubyBjb250cm9sIGlzIGZvdW5kIGF0IHRoZSBzcGVjaWZpZWQgcGF0aCBvciBpZiB0aGUgY29udHJvbCB0eXBlIGlzIHVua25vd24uXG4gICAqL1xuICBzdGF0aWMgdmFsaWRhdGVGaWVsZHMoY29udHJvbDogQWJzdHJhY3RDb250cm9sLCBwYXRoPzogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29udHJvbCA9IHBhdGggPyBjb250cm9sLmdldChwYXRoKSBhcyBBYnN0cmFjdENvbnRyb2wgOiBjb250cm9sO1xuICAgIGlmICghY29udHJvbClcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gY29udHJvbCBmb3VuZCBhdCBwYXRoOiAke3BhdGggfHwgJ3Jvb3QnfS5gKTtcblxuICAgIGNvbnN0IGlzQWxsb3dlZCA9IFtGb3JtR3JvdXAsIEZvcm1Db250cm9sXS5zb21lKHR5cGUgPT4gY29udHJvbCBpbnN0YW5jZW9mIHR5cGUpO1xuICAgIGlmICghaXNBbGxvd2VkKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGNvbnRyb2wgdHlwZSBhdDogJHtwYXRoIHx8ICdyb290J31gKTtcblxuICAgIGNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xuICAgIGNvbnRyb2wubWFya0FzRGlydHkoKTtcbiAgICBjb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoeyBlbWl0RXZlbnQ6IHRydWUgfSk7XG5cbiAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xuICAgICAgT2JqZWN0LnZhbHVlcyhjb250cm9sLmNvbnRyb2xzKS5mb3JFYWNoKChjaGlsZENvbnRyb2wpID0+IHtcbiAgICAgICAgdGhpcy52YWxpZGF0ZUZpZWxkcyhjaGlsZENvbnRyb2wpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRyb2wudmFsaWQ7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEdlbmVyYXRlcyB2YWxpZGF0b3JzIGZyb20gY29tcG9uZW50IHByb3BlcnRpZXMuXG4gICAqIEBzdW1tYXJ5IENyZWF0ZXMgYW4gYXJyYXkgb2YgVmFsaWRhdG9yRm4gYmFzZWQgb24gdGhlIHN1cHBvcnRlZCB2YWxpZGF0aW9uIGtleXMgaW4gdGhlIGNvbXBvbmVudCBwcm9wZXJ0aWVzLlxuICAgKiBAcGFyYW0ge0ZpZWxkUHJvcGVydGllc30gcHJvcHMgLSBUaGUgY29tcG9uZW50IHByb3BlcnRpZXMuXG4gICAqIEByZXR1cm4ge1ZhbGlkYXRvckZuW119IEFuIGFycmF5IG9mIHZhbGlkYXRvciBmdW5jdGlvbnMuXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyB2YWxpZGF0b3JzRnJvbVByb3BzKHByb3BzOiBGaWVsZFByb3BlcnRpZXMpOiBWYWxpZGF0b3JGbltdIHtcbiAgICBjb25zdCBzdXBwb3J0ZWRWYWxpZGF0aW9uS2V5cyA9IFZhbGlkYXRpb24ua2V5cygpO1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhwcm9wcylcbiAgICAgIC5maWx0ZXIoKGs6IHN0cmluZykgPT4gc3VwcG9ydGVkVmFsaWRhdGlvbktleXMuaW5jbHVkZXMoaykpXG4gICAgICAubWFwKChrOiBzdHJpbmcpID0+IHtcbiAgICAgICAgcmV0dXJuIFZhbGlkYXRvckZhY3Rvcnkuc3Bhd24ocHJvcHMsIGspO1xuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYSBGb3JtQ29udHJvbCBmcm9tIGNvbXBvbmVudCBwcm9wZXJ0aWVzLlxuICAgKiBAc3VtbWFyeSBHZW5lcmF0ZXMgYSBGb3JtQ29udHJvbCB3aXRoIHZhbGlkYXRvcnMgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGNvbXBvbmVudCBwcm9wZXJ0aWVzLlxuICAgKiBAcGFyYW0ge0ZpZWxkUHJvcGVydGllc30gcHJvcHMgLSBUaGUgY29tcG9uZW50IHByb3BlcnRpZXMuXG4gICAqIEBwYXJhbSB7RmllbGRVcGRhdGVNb2RlfSBbdXBkYXRlTW9kZT0nY2hhbmdlJ10gLSBUaGUgdXBkYXRlIG1vZGUgZm9yIHRoZSBjb250cm9sLlxuICAgKiBAcmV0dXJuIHtGb3JtQ29udHJvbH0gVGhlIGNyZWF0ZWQgRm9ybUNvbnRyb2wuXG4gICAqL1xuICBzdGF0aWMgZnJvbVByb3BzKHByb3BzOiBGaWVsZFByb3BlcnRpZXMsIHVwZGF0ZU1vZGU6IEZpZWxkVXBkYXRlTW9kZSA9ICdjaGFuZ2UnKTogRm9ybUNvbnRyb2wge1xuICAgIGNvbnN0IHZhbGlkYXRvcnMgPSB0aGlzLnZhbGlkYXRvcnNGcm9tUHJvcHMocHJvcHMpO1xuICAgIGNvbnN0IGNvbXBvc2VkID0gdmFsaWRhdG9ycy5sZW5ndGggPyBWYWxpZGF0b3JzLmNvbXBvc2UodmFsaWRhdG9ycykgOiBudWxsO1xuICAgIHJldHVybiBuZXcgRm9ybUNvbnRyb2woXG4gICAgICB7XG4gICAgICAgIHZhbHVlOlxuICAgICAgICAgIHByb3BzLnZhbHVlICYmIHByb3BzLnR5cGUgIT09IEhUTUw1SW5wdXRUeXBlcy5DSEVDS0JPWFxuICAgICAgICAgICAgPyBwcm9wcy50eXBlID09PSBIVE1MNUlucHV0VHlwZXMuREFURVxuICAgICAgICAgICAgICA/ICFpc1ZhbGlkRGF0ZShwYXJzZURhdGUocHJvcHMuZm9ybWF0IGFzIHN0cmluZywgcHJvcHMudmFsdWUgYXMgc3RyaW5nKSlcbiAgICAgICAgICAgICAgICA/IHVuZGVmaW5lZCA6IHByb3BzLnZhbHVlIDpcbiAgICAgICAgICAgICAgKHByb3BzLnZhbHVlIGFzIHVua25vd24pIDogdW5kZWZpbmVkLFxuICAgICAgICBkaXNhYmxlZDogcHJvcHMuZGlzYWJsZWQsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB2YWxpZGF0b3JzOiBjb21wb3NlZCxcbiAgICAgICAgdXBkYXRlT246IHVwZGF0ZU1vZGUsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJldHJpZXZlcyBwcm9wZXJ0aWVzIGZyb20gYSBGb3JtQ29udHJvbC5cbiAgICogQHN1bW1hcnkgR2V0cyB0aGUgRmllbGRQcm9wZXJ0aWVzIGFzc29jaWF0ZWQgd2l0aCBhIEZvcm1Db250cm9sIGZyb20gdGhlIGludGVybmFsIFdlYWtNYXAuXG4gICAqIEBwYXJhbSB7Rm9ybUNvbnRyb2x9IGNvbnRyb2wgLSBUaGUgRm9ybUNvbnRyb2wgdG8gZ2V0IHByb3BlcnRpZXMgZm9yLlxuICAgKiBAcmV0dXJuIHtGaWVsZFByb3BlcnRpZXN9IFRoZSBwcm9wZXJ0aWVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgY29udHJvbC5cbiAgICovXG4gIHN0YXRpYyBnZXRQcm9wc0Zyb21Db250cm9sKGNvbnRyb2w6IEZvcm1Db250cm9sKTogRmllbGRQcm9wZXJ0aWVzIHtcbiAgICByZXR1cm4gdGhpcy5jb250cm9scy5nZXQoY29udHJvbCkgfHwge30gYXMgRmllbGRQcm9wZXJ0aWVzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBGaW5kcyBhIHBhcmVudCBlbGVtZW50IHdpdGggYSBzcGVjaWZpYyB0YWcuXG4gICAqIEBzdW1tYXJ5IFRyYXZlcnNlcyB1cCB0aGUgRE9NIHRyZWUgdG8gZmluZCB0aGUgbmVhcmVzdCBwYXJlbnQgZWxlbWVudCB3aXRoIHRoZSBzcGVjaWZpZWQgdGFnLlxuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbCAtIFRoZSBzdGFydGluZyBlbGVtZW50LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFnIC0gVGhlIHRhZyBuYW1lIHRvIHNlYXJjaCBmb3IuXG4gICAqIEByZXR1cm4ge0hUTUxFbGVtZW50fSBUaGUgZm91bmQgcGFyZW50IGVsZW1lbnQuXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiBubyBwYXJlbnQgd2l0aCB0aGUgc3BlY2lmaWVkIHRhZyBpcyBmb3VuZC5cbiAgICovXG4gIHN0YXRpYyBnZXRQYXJlbnRFbChlbDogSFRNTEVsZW1lbnQsIHRhZzogc3RyaW5nKSB7XG4gICAgbGV0IHBhcmVudDogSFRNTEVsZW1lbnQgfCBudWxsO1xuICAgIHdoaWxlICgocGFyZW50ID0gZWwucGFyZW50RWxlbWVudCkgIT09IG51bGwpIHtcbiAgICAgIGlmIChwYXJlbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSB0YWcudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICByZXR1cm4gcGFyZW50O1xuICAgICAgfVxuICAgICAgZWwgPSBwYXJlbnQ7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBObyBwYXJlbnQgd2l0aCB0aGUgdGFnICR7dGFnfSB3YXMgZm91bmQgZm9yIHByb3ZpZGVkIGVsZW1lbnRgLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJlZ2lzdGVycyBhIGNvbnRyb2wgd2l0aCBpdHMgcHJvcGVydGllcy5cbiAgICogQHN1bW1hcnkgQXNzb2NpYXRlcyBhIGNvbnRyb2wgd2l0aCBpdHMgcHJvcGVydGllcyBpbiB0aGUgaW50ZXJuYWwgV2Vha01hcC5cbiAgICogQHBhcmFtIHtBYnN0cmFjdENvbnRyb2x9IGNvbnRyb2wgLSBUaGUgY29udHJvbCB0byByZWdpc3Rlci5cbiAgICogQHBhcmFtIHtGaWVsZFByb3BlcnRpZXN9IHByb3BzIC0gVGhlIHByb3BlcnRpZXMgdG8gYXNzb2NpYXRlIHdpdGggdGhlIGNvbnRyb2wuXG4gICAqL1xuICBzdGF0aWMgcmVnaXN0ZXIoY29udHJvbDogQWJzdHJhY3RDb250cm9sLCBwcm9wczogRmllbGRQcm9wZXJ0aWVzKSB7XG4gICAgdGhpcy5jb250cm9scy5zZXQoY29udHJvbCwgcHJvcHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBVbnJlZ2lzdGVycyBhIGNvbnRyb2wuXG4gICAqIEBzdW1tYXJ5IFJlbW92ZXMgYSBjb250cm9sIGFuZCBpdHMgYXNzb2NpYXRlZCBwcm9wZXJ0aWVzIGZyb20gdGhlIGludGVybmFsIFdlYWtNYXAuXG4gICAqIEBwYXJhbSB7QWJzdHJhY3RDb250cm9sfSBjb250cm9sIC0gVGhlIGNvbnRyb2wgdG8gdW5yZWdpc3Rlci5cbiAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgY29udHJvbCB3YXMgc3VjY2Vzc2Z1bGx5IHVucmVnaXN0ZXJlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgKi9cbiAgc3RhdGljIHVucmVnaXN0ZXIoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29udHJvbHMuZGVsZXRlKGNvbnRyb2wpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZXNldHMgYSBmb3JtIGdyb3VwLlxuICAgKiBAc3VtbWFyeSBSZWN1cnNpdmVseSByZXNldHMgYWxsIGNvbnRyb2xzIGluIGEgZm9ybSBncm91cCwgY2xlYXJpbmcgdmFsdWVzLCBlcnJvcnMsIGFuZCBtYXJraW5nIHRoZW0gYXMgcHJpc3RpbmUgYW5kIHVudG91Y2hlZC5cbiAgICogQHBhcmFtIHtGb3JtR3JvdXB9IGZvcm1Hcm91cCAtIFRoZSBmb3JtIGdyb3VwIHRvIHJlc2V0LlxuICAgKi9cbiAgc3RhdGljIHJlc2V0KGZvcm1Hcm91cDogRm9ybUdyb3VwKSB7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gZm9ybUdyb3VwLmNvbnRyb2xzKSB7XG4gICAgICBjb25zdCBjb250cm9sID0gZm9ybUdyb3VwLmNvbnRyb2xzW2tleV07XG4gICAgICBpZiAoIShjb250cm9sIGluc3RhbmNlb2YgRm9ybUNvbnRyb2wpKSB7XG4gICAgICAgIE5neEZvcm1TZXJ2aWNlLnJlc2V0KGNvbnRyb2wgYXMgRm9ybUdyb3VwKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgdHlwZSB9ID0gTmd4Rm9ybVNlcnZpY2UuZ2V0UHJvcHNGcm9tQ29udHJvbChjb250cm9sKTtcbiAgICAgIGlmICghSFRNTDVDaGVja1R5cGVzLmluY2x1ZGVzKHR5cGUpKVxuICAgICAgICBjb250cm9sLnNldFZhbHVlKHVuZGVmaW5lZCk7XG4gICAgICBjb250cm9sLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgICBjb250cm9sLm1hcmtBc1VudG91Y2hlZCgpO1xuICAgICAgY29udHJvbC5zZXRFcnJvcnMobnVsbCk7XG4gICAgICBjb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
315
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTmd4Rm9ybVNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2VuZ2luZS9OZ3hGb3JtU2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFtQixlQUFlLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRXZILE9BQU8sRUFBbUIsV0FBVyxFQUFFLFNBQVMsRUFBZSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRyxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUd0RDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFDRztBQUNILE1BQU0sT0FBTyxjQUFjO2FBQ1YsYUFBUSxHQUFHLElBQUksT0FBTyxFQUFvQyxDQUFDO2FBQzNELGlCQUFZLEdBQUcsSUFBSSxHQUFHLEVBQXFCLENBQUM7SUFFM0Q7Ozs7OztPQU1HO0lBQ0gsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFjLEVBQUUsU0FBb0I7UUFDckQsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7WUFDL0IsTUFBTSxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsTUFBTSwwQkFBMEIsQ0FBQyxDQUFDO1FBQzVFLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBYztRQUNsQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ssTUFBTSxDQUFDLGtCQUFr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Ozs7T0FLRztJQUNILE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBd0IsRUFBRSxLQUFzQjtRQUM5RCxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsTUFBTSxDQUFDLFVBQVUsQ0FBQyxPQUF3QjtRQUN4QyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFvQjtRQUMvQixLQUFLLE1BQU0sR0FBRyxJQUFJLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNyQyxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3hDLElBQUksQ0FBQyxDQUFDLE9BQU8sWUFBWSxXQUFXLENBQUMsRUFBRSxDQUFDO2dCQUN0QyxjQUFjLENBQUMsS0FBSyxDQUFDLE9BQW9CLENBQUMsQ0FBQztnQkFDM0MsU0FBUztZQUNYLENBQUM7WUFFRCxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsY0FBYyxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzdELElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztnQkFDakMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUM5QixPQUFPLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDekIsT0FBTyxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQzFCLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEIsT0FBTyxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDbkMsQ0FBQztJQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBlc2NhcGVIdG1sLCBGaWVsZFByb3BlcnRpZXMsIEhUTUw1Q2hlY2tUeXBlcywgSFRNTDVJbnB1dFR5cGVzLCBwYXJzZVRvTnVtYmVyIH0gZnJvbSAnQGRlY2FmLXRzL3VpLWRlY29yYXRvcnMnO1xuaW1wb3J0IHsgIENvbXBvbmVudENvbmZpZywgQ29tcG9uZW50SW5wdXQsIEZpZWxkVXBkYXRlTW9kZSwgRm9ybVBhcmVudEdyb3VwIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvckZuLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgaXNWYWxpZERhdGUsIHBhcnNlRGF0ZSwgVmFsaWRhdGlvbiB9IGZyb20gJ0BkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvbic7XG5pbXBvcnQgeyBWYWxpZGF0b3JGYWN0b3J5IH0gZnJvbSAnLi9WYWxpZGF0b3JGYWN0b3J5JztcblxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBTZXJ2aWNlIGZvciBtYW5hZ2luZyBBbmd1bGFyIGZvcm1zIGFuZCBmb3JtIGNvbnRyb2xzLlxuICogQHN1bW1hcnkgVGhlIE5neEZvcm1TZXJ2aWNlIHByb3ZpZGVzIHV0aWxpdHkgbWV0aG9kcyBmb3IgY3JlYXRpbmcsIG1hbmFnaW5nLCBhbmQgdmFsaWRhdGluZyBBbmd1bGFyIGZvcm1zIGFuZCBmb3JtIGNvbnRyb2xzLiBJdCBpbmNsdWRlcyBmdW5jdGlvbmFsaXR5IGZvciByZWdpc3RlcmluZyBmb3JtcywgYWRkaW5nIGNvbnRyb2xzLCB2YWxpZGF0aW5nIGZpZWxkcywgYW5kIGhhbmRsaW5nIGZvcm0gZGF0YS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSB7V2Vha01hcDxBYnN0cmFjdENvbnRyb2wsIEZpZWxkUHJvcGVydGllcz59IGNvbnRyb2xzIC0gQSBXZWFrTWFwIHRvIHN0b3JlIGNvbnRyb2wgcHJvcGVydGllcy5cbiAqIEBwYXJhbSB7TWFwPHN0cmluZywgRm9ybUdyb3VwPn0gZm9ybVJlZ2lzdHJ5IC0gQSBNYXAgdG8gc3RvcmUgcmVnaXN0ZXJlZCBmb3Jtcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ3JlYXRpbmcgYSBmb3JtIGZyb20gY29tcG9uZW50c1xuICogY29uc3QgY29tcG9uZW50cyA9IFtcbiAqICAgeyBpbnB1dHM6IHsgbmFtZTogJ3VzZXJuYW1lJywgdHlwZTogJ3RleHQnLCByZXF1aXJlZDogdHJ1ZSB9IH0sXG4gKiAgIHsgaW5wdXRzOiB7IG5hbWU6ICdwYXNzd29yZCcsIHR5cGU6ICdwYXNzd29yZCcsIG1pbkxlbmd0aDogOCB9IH1cbiAqIF07XG4gKiBjb25zdCBmb3JtID0gTmd4Rm9ybVNlcnZpY2UuY3JlYXRlRm9ybUZyb21Db21wb25lbnRzKCdsb2dpbkZvcm0nLCBjb21wb25lbnRzLCB0cnVlKTtcbiAqXG4gKiAvLyBWYWxpZGF0aW5nIGZpZWxkc1xuICogTmd4Rm9ybVNlcnZpY2UudmFsaWRhdGVGaWVsZHMoZm9ybSk7XG4gKlxuICogLy8gR2V0dGluZyBmb3JtIGRhdGFcbiAqIGNvbnN0IGZvcm1EYXRhID0gTmd4Rm9ybVNlcnZpY2UuZ2V0Rm9ybURhdGEoZm9ybSk7XG4gKlxuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBDIGFzIENvbXBvbmVudFxuICogICBwYXJ0aWNpcGFudCBORlMgYXMgTmd4Rm9ybVNlcnZpY2VcbiAqICAgcGFydGljaXBhbnQgQUYgYXMgQW5ndWxhciBGb3Jtc1xuICogICBDLT4+TkZTOiBjcmVhdGVGb3JtRnJvbUNvbXBvbmVudHMoKVxuICogICBORlMtPj5BRjogbmV3IEZvcm1Hcm91cCgpXG4gKiAgIE5GUy0+Pk5GUzogYWRkRm9ybUNvbnRyb2woKVxuICogICBORlMtPj5BRjogYWRkQ29udHJvbCgpXG4gKiAgIE5GUy0tPj5DOiBSZXR1cm4gRm9ybUdyb3VwXG4gKiAgIEMtPj5ORlM6IHZhbGlkYXRlRmllbGRzKClcbiAqICAgTkZTLT4+QUY6IG1hcmtBc1RvdWNoZWQoKSwgbWFya0FzRGlydHkoKSwgdXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpXG4gKiAgIEMtPj5ORlM6IGdldEZvcm1EYXRhKClcbiAqICAgTkZTLT4+QUY6IEdldCBjb250cm9sIHZhbHVlc1xuICogICBORlMtLT4+QzogUmV0dXJuIGZvcm0gZGF0YVxuICovXG5leHBvcnQgY2xhc3MgTmd4Rm9ybVNlcnZpY2Uge1xuICBwcml2YXRlIHN0YXRpYyBjb250cm9scyA9IG5ldyBXZWFrTWFwPEFic3RyYWN0Q29udHJvbCwgRmllbGRQcm9wZXJ0aWVzPigpO1xuICBwcml2YXRlIHN0YXRpYyBmb3JtUmVnaXN0cnkgPSBuZXcgTWFwPHN0cmluZywgRm9ybUdyb3VwPigpO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQWRkcyBhIGZvcm0gdG8gdGhlIHJlZ2lzdHJ5LlxuICAgKiBAc3VtbWFyeSBSZWdpc3RlcnMgYSBGb3JtR3JvdXAgd2l0aCBhIHVuaXF1ZSBpZGVudGlmaWVyLiBUaHJvd3MgYW4gZXJyb3IgaWYgdGhlIGlkZW50aWZpZXIgaXMgYWxyZWFkeSBpbiB1c2UuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtSWQgLSBUaGUgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBmb3JtLlxuICAgKiBAcGFyYW0ge0Zvcm1Hcm91cH0gZm9ybUdyb3VwIC0gVGhlIEZvcm1Hcm91cCB0byBiZSByZWdpc3RlcmVkLlxuICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgYSBGb3JtR3JvdXAgd2l0aCB0aGUgZ2l2ZW4gaWQgaXMgYWxyZWFkeSByZWdpc3RlcmVkLlxuICAgKi9cbiAgc3RhdGljIGFkZFJlZ2lzdHJ5KGZvcm1JZDogc3RyaW5nLCBmb3JtR3JvdXA6IEZvcm1Hcm91cCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmZvcm1SZWdpc3RyeS5oYXMoZm9ybUlkKSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQSBGb3JtR3JvdXAgd2l0aCBpZCAnJHtmb3JtSWR9JyBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQuYCk7XG4gICAgdGhpcy5mb3JtUmVnaXN0cnkuc2V0KGZvcm1JZCwgZm9ybUdyb3VwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVtb3ZlcyBhIGZvcm0gZnJvbSB0aGUgcmVnaXN0cnkuXG4gICAqIEBzdW1tYXJ5IERlbGV0ZXMgYSBGb3JtR3JvdXAgZnJvbSB0aGUgcmVnaXN0cnkgdXNpbmcgaXRzIHVuaXF1ZSBpZGVudGlmaWVyLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZm9ybUlkIC0gVGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBmb3JtIHRvIGJlIHJlbW92ZWQuXG4gICAqL1xuICBzdGF0aWMgcmVtb3ZlUmVnaXN0cnkoZm9ybUlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm1SZWdpc3RyeS5kZWxldGUoZm9ybUlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVzb2x2ZXMgdGhlIHBhcmVudCBncm91cCBhbmQgY29udHJvbCBuYW1lIGZyb20gYSBwYXRoLlxuICAgKiBAc3VtbWFyeSBUcmF2ZXJzZXMgdGhlIGZvcm0gZ3JvdXAgc3RydWN0dXJlIHRvIGZpbmQgdGhlIHBhcmVudCBncm91cCBhbmQgY29udHJvbCBuYW1lIGZvciBhIGdpdmVuIHBhdGguXG4gICAqIEBwYXJhbSB7Rm9ybUdyb3VwfSBmb3JtR3JvdXAgLSBUaGUgcm9vdCBGb3JtR3JvdXAuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIC0gVGhlIHBhdGggdG8gdGhlIGNvbnRyb2wuXG4gICAqIEByZXR1cm4ge0Zvcm1QYXJlbnRHcm91cH0gQSB0dXBsZSBjb250YWluaW5nIHRoZSBwYXJlbnQgRm9ybUdyb3VwIGFuZCB0aGUgY29udHJvbCBuYW1lLlxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgcmVzb2x2ZVBhcmVudEdyb3VwKGZvcm1Hcm91cDogRm9ybUdyb3VwLCBwYXRoOiBzdHJpbmcpOiBGb3JtUGFyZW50R3JvdXAge1xuICAgIGNvbnN0IHBhcnRzID0gcGF0aC5zcGxpdCgnLicpO1xuICAgIGNvbnN0IGNvbnRyb2xOYW1lID0gcGFydHMucG9wKCkgYXMgc3RyaW5nO1xuICAgIGxldCBjdXJyZW50R3JvdXAgPSBmb3JtR3JvdXA7XG4gICAgZm9yIChjb25zdCBwYXJ0IG9mIHBhcnRzKSB7XG4gICAgICBpZiAoIWN1cnJlbnRHcm91cC5nZXQocGFydCkpIHtcbiAgICAgICAgY3VycmVudEdyb3VwLmFkZENvbnRyb2wocGFydCwgbmV3IEZvcm1Hcm91cCh7fSkpO1xuICAgICAgfVxuICAgICAgY3VycmVudEdyb3VwID0gY3VycmVudEdyb3VwLmdldChwYXJ0KSBhcyBGb3JtR3JvdXA7XG4gICAgfVxuICAgIHJldHVybiBbY3VycmVudEdyb3VwLCBjb250cm9sTmFtZV07XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEFkZHMgYSBmb3JtIGNvbnRyb2wgdG8gYSBmb3JtIGdyb3VwLlxuICAgKiBAc3VtbWFyeSBDcmVhdGVzIGFuZCBhZGRzIGEgZm9ybSBjb250cm9sIHRvIHRoZSBzcGVjaWZpZWQgZm9ybSBncm91cCBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgY29tcG9uZW50IHByb3BlcnRpZXMuXG4gICAqIEBwYXJhbSB7Rm9ybUdyb3VwfSBmb3JtR3JvdXAgLSBUaGUgZm9ybSBncm91cCB0byBhZGQgdGhlIGNvbnRyb2wgdG8uXG4gICAqIEBwYXJhbSB7Q29tcG9uZW50SW5wdXR9IGNvbXBvbmVudFByb3BzIC0gVGhlIHByb3BlcnRpZXMgb2YgdGhlIGNvbXBvbmVudCB0byBjcmVhdGUgdGhlIGNvbnRyb2wgZnJvbS5cbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGFkZEZvcm1Db250cm9sKGZvcm1Hcm91cDogRm9ybUdyb3VwLCBjb21wb25lbnRQcm9wczogQ29tcG9uZW50SW5wdXQpOiB2b2lkIHtcblxuICAgIGNvbnN0IHsgbmFtZSwgY2hpbGRPZiB9ID0gY29tcG9uZW50UHJvcHM7XG4gICAgY29uc3QgZnVsbFBhdGggPSBjaGlsZE9mID8gYCR7Y2hpbGRPZn0uJHtuYW1lfWAgOiBuYW1lO1xuICAgIGNvbnN0IFtwYXJlbnRHcm91cCwgY29udHJvbE5hbWVdID0gdGhpcy5yZXNvbHZlUGFyZW50R3JvdXAoZm9ybUdyb3VwLCBmdWxsUGF0aCk7XG5cbiAgICBpZiAoIXBhcmVudEdyb3VwLmdldChjb250cm9sTmFtZSkpIHtcbiAgICAgIGNvbnN0IGNvbnRyb2wgPSBOZ3hGb3JtU2VydmljZS5mcm9tUHJvcHMoXG4gICAgICAgIGNvbXBvbmVudFByb3BzLFxuICAgICAgICBjb21wb25lbnRQcm9wcy51cGRhdGVNb2RlIHx8ICdjaGFuZ2UnLFxuICAgICAgKTtcbiAgICAgIE5neEZvcm1TZXJ2aWNlLnJlZ2lzdGVyKGNvbnRyb2wsIGNvbXBvbmVudFByb3BzKTtcbiAgICAgIHBhcmVudEdyb3VwLmFkZENvbnRyb2woY29udHJvbE5hbWUsIGNvbnRyb2wpO1xuICAgIH1cblxuICAgIGNvbXBvbmVudFByb3BzWydmb3JtR3JvdXAnXSA9IHBhcmVudEdyb3VwO1xuICAgIGNvbXBvbmVudFByb3BzWydmb3JtQ29udHJvbCddID0gcGFyZW50R3JvdXAuZ2V0KGNvbnRyb2xOYW1lKSBhcyBGb3JtQ29udHJvbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmV0cmlldmVzIGEgY29udHJvbCBmcm9tIGEgcmVnaXN0ZXJlZCBmb3JtLlxuICAgKiBAc3VtbWFyeSBGaW5kcyBhbmQgcmV0dXJucyBhbiBBYnN0cmFjdENvbnRyb2wgZnJvbSBhIHJlZ2lzdGVyZWQgZm9ybSB1c2luZyB0aGUgZm9ybSBpZCBhbmQgb3B0aW9uYWwgcGF0aC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGZvcm1JZCAtIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgZm9ybS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtwYXRoXSAtIFRoZSBwYXRoIHRvIHRoZSBjb250cm9sIHdpdGhpbiB0aGUgZm9ybS5cbiAgICogQHJldHVybiB7QWJzdHJhY3RDb250cm9sfSBUaGUgcmVxdWVzdGVkIEFic3RyYWN0Q29udHJvbC5cbiAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBmb3JtIGlzIG5vdCBmb3VuZCBpbiB0aGUgcmVnaXN0cnkgb3IgdGhlIGNvbnRyb2wgaXMgbm90IGZvdW5kIGluIHRoZSBmb3JtLlxuICAgKi9cbiAgc3RhdGljIGdldENvbnRyb2xGcm9tRm9ybShmb3JtSWQ6IHN0cmluZywgcGF0aD86IHN0cmluZyk6IEFic3RyYWN0Q29udHJvbCB7XG4gICAgY29uc3QgZm9ybSA9IHRoaXMuZm9ybVJlZ2lzdHJ5LmdldChmb3JtSWQpO1xuICAgIGlmICghZm9ybSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRm9ybSB3aXRoIGlkICcke2Zvcm1JZH0nIG5vdCBmb3VuZCBpbiB0aGUgcmVnaXN0cnkuYCk7XG5cbiAgICBpZiAoIXBhdGgpXG4gICAgICByZXR1cm4gZm9ybTtcblxuICAgIGNvbnN0IGNvbnRyb2wgPSBmb3JtLmdldChwYXRoKTtcbiAgICBpZiAoIWNvbnRyb2wpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbnRyb2wgd2l0aCBwYXRoICcke3BhdGh9JyBub3QgZm91bmQgaW4gZm9ybSAnJHtmb3JtSWR9Jy5gKTtcbiAgICByZXR1cm4gY29udHJvbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIGZvcm0gZnJvbSBjb21wb25lbnQgY29uZmlndXJhdGlvbnMuXG4gICAqIEBzdW1tYXJ5IEdlbmVyYXRlcyBhIEZvcm1Hcm91cCBiYXNlZCBvbiBhbiBhcnJheSBvZiBjb21wb25lbnQgY29uZmlndXJhdGlvbnMgYW5kIG9wdGlvbmFsbHkgcmVnaXN0ZXJzIGl0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgLSBUaGUgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBmb3JtLlxuICAgKiBAcGFyYW0ge0NvbXBvbmVudENvbmZpZ1tdfSBjb21wb25lbnRzIC0gQW4gYXJyYXkgb2YgY29tcG9uZW50IGNvbmZpZ3VyYXRpb25zLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtyZWdpc3RyeT1mYWxzZV0gLSBXaGV0aGVyIHRvIHJlZ2lzdGVyIHRoZSBjcmVhdGVkIGZvcm0uXG4gICAqIEByZXR1cm4ge0Zvcm1Hcm91cH0gVGhlIGNyZWF0ZWQgRm9ybUdyb3VwLlxuICAgKi9cbiAgc3RhdGljIGNyZWF0ZUZvcm1Gcm9tQ29tcG9uZW50cyhpZDogc3RyaW5nLCBjb21wb25lbnRzOiBDb21wb25lbnRDb25maWdbXSwgcmVnaXN0cnk6IGJvb2xlYW4gPSBmYWxzZSk6IEZvcm1Hcm91cCB7XG4gICAgY29uc3QgZm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xuICAgIGNvbXBvbmVudHMuZm9yRWFjaChjb21wb25lbnQgPT4ge1xuICAgICAgdGhpcy5hZGRGb3JtQ29udHJvbChmb3JtLCBjb21wb25lbnQuaW5wdXRzKTtcbiAgICB9KTtcblxuICAgIGlmIChyZWdpc3RyeSlcbiAgICAgIHRoaXMuYWRkUmVnaXN0cnkoaWQsIGZvcm0pO1xuXG4gICAgcmV0dXJuIGZvcm07XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEFkZHMgYSBjb250cm9sIHRvIGEgZm9ybSBiYXNlZCBvbiBjb21wb25lbnQgcHJvcGVydGllcy5cbiAgICogQHN1bW1hcnkgQ3JlYXRlcyBhbmQgYWRkcyBhIGZvcm0gY29udHJvbCB0byBhIGZvcm0gKGV4aXN0aW5nIG9yIG5ldykgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGNvbXBvbmVudCBwcm9wZXJ0aWVzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgLSBUaGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIGZvcm0uXG4gICAqIEBwYXJhbSB7RmllbGRQcm9wZXJ0aWVzfSBjb21wb25lbnRQcm9wZXJ0aWVzIC0gVGhlIHByb3BlcnRpZXMgb2YgdGhlIGNvbXBvbmVudCB0byBjcmVhdGUgdGhlIGNvbnRyb2wgZnJvbS5cbiAgICogQHJldHVybiB7QWJzdHJhY3RDb250cm9sfSBUaGUgZm9ybSBvciBjcmVhdGVkIGNvbnRyb2wuXG4gICAqL1xuICBzdGF0aWMgYWRkQ29udHJvbEZyb21Qcm9wcyhpZDogc3RyaW5nLCBjb21wb25lbnRQcm9wZXJ0aWVzOiBGaWVsZFByb3BlcnRpZXMpOiBBYnN0cmFjdENvbnRyb2wge1xuICAgIGNvbnN0IGZvcm0gPSB0aGlzLmZvcm1SZWdpc3RyeS5nZXQoaWQpID8/IG5ldyBGb3JtR3JvdXAoe30pO1xuICAgIGlmICghdGhpcy5mb3JtUmVnaXN0cnkuaGFzKGlkKSlcbiAgICAgIHRoaXMuYWRkUmVnaXN0cnkoaWQsIGZvcm0pO1xuXG4gICAgaWYgKGNvbXBvbmVudFByb3BlcnRpZXMucGF0aClcbiAgICAgIHRoaXMuYWRkRm9ybUNvbnRyb2woZm9ybSwgY29tcG9uZW50UHJvcGVydGllcyk7XG5cbiAgICByZXR1cm4gZm9ybTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmV0cmlldmVzIGZvcm0gZGF0YSBmcm9tIGEgRm9ybUdyb3VwLlxuICAgKiBAc3VtbWFyeSBFeHRyYWN0cyBhbmQgcHJvY2Vzc2VzIHRoZSBkYXRhIGZyb20gYSBGb3JtR3JvdXAsIGhhbmRsaW5nIGRpZmZlcmVudCBpbnB1dCB0eXBlcyBhbmQgbmVzdGVkIGZvcm0gZ3JvdXBzLlxuICAgKiBAcGFyYW0ge0Zvcm1Hcm91cH0gZm9ybUdyb3VwIC0gVGhlIEZvcm1Hcm91cCB0byBleHRyYWN0IGRhdGEgZnJvbS5cbiAgICogQHJldHVybiB7UmVjb3JkPHN0cmluZywgdW5rbm93bj59IEFuIG9iamVjdCBjb250YWluaW5nIHRoZSBmb3JtIGRhdGEuXG4gICAqL1xuICBzdGF0aWMgZ2V0Rm9ybURhdGEoZm9ybUdyb3VwOiBGb3JtR3JvdXApOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgY29uc3QgZGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBmb3JtR3JvdXAuY29udHJvbHMpIHtcbiAgICAgIGNvbnN0IGNvbnRyb2wgPSBmb3JtR3JvdXAuY29udHJvbHNba2V5XTtcbiAgICAgIGlmICghKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQ29udHJvbCkpIHtcbiAgICAgICAgZGF0YVtrZXldID0gTmd4Rm9ybVNlcnZpY2UuZ2V0Rm9ybURhdGEoY29udHJvbCBhcyBGb3JtR3JvdXApO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcHJvcHMgPSBOZ3hGb3JtU2VydmljZS5nZXRQcm9wc0Zyb21Db250cm9sKGNvbnRyb2wpO1xuICAgICAgbGV0IHZhbHVlID0gY29udHJvbC52YWx1ZTtcbiAgICAgIGlmICghSFRNTDVDaGVja1R5cGVzLmluY2x1ZGVzKHByb3BzWyd0eXBlJ10pKSB7XG4gICAgICAgIHN3aXRjaCAocHJvcHNbJ3R5cGUnXSkge1xuICAgICAgICAgIGNhc2UgSFRNTDVJbnB1dFR5cGVzLk5VTUJFUjpcbiAgICAgICAgICAgIHZhbHVlID0gcGFyc2VUb051bWJlcih2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIEhUTUw1SW5wdXRUeXBlcy5EQVRFOlxuICAgICAgICAgIGNhc2UgSFRNTDVJbnB1dFR5cGVzLkRBVEVUSU1FX0xPQ0FMOlxuICAgICAgICAgICAgdmFsdWUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdmFsdWUgPSBlc2NhcGVIdG1sKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZGF0YVtrZXldID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFZhbGlkYXRlcyBmaWVsZHMgaW4gYSBmb3JtIGNvbnRyb2wgb3IgZm9ybSBncm91cC5cbiAgICogQHN1bW1hcnkgUmVjdXJzaXZlbHkgdmFsaWRhdGVzIGFsbCBmaWVsZHMgaW4gYSBmb3JtIGNvbnRyb2wgb3IgZm9ybSBncm91cCwgbWFya2luZyB0aGVtIGFzIHRvdWNoZWQgYW5kIGRpcnR5LlxuICAgKiBAcGFyYW0ge0Fic3RyYWN0Q29udHJvbH0gY29udHJvbCAtIFRoZSBjb250cm9sIG9yIGZvcm0gZ3JvdXAgdG8gdmFsaWRhdGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcGF0aF0gLSBUaGUgcGF0aCB0byB0aGUgY29udHJvbCB3aXRoaW4gdGhlIGZvcm0uXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgYWxsIGZpZWxkcyBhcmUgdmFsaWQsIGZhbHNlIG90aGVyd2lzZS5cbiAgICogQHRocm93cyB7RXJyb3J9IElmIG5vIGNvbnRyb2wgaXMgZm91bmQgYXQgdGhlIHNwZWNpZmllZCBwYXRoIG9yIGlmIHRoZSBjb250cm9sIHR5cGUgaXMgdW5rbm93bi5cbiAgICovXG4gIHN0YXRpYyB2YWxpZGF0ZUZpZWxkcyhjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsIHBhdGg/OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb250cm9sID0gcGF0aCA/IGNvbnRyb2wuZ2V0KHBhdGgpIGFzIEFic3RyYWN0Q29udHJvbCA6IGNvbnRyb2w7XG4gICAgaWYgKCFjb250cm9sKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBjb250cm9sIGZvdW5kIGF0IHBhdGg6ICR7cGF0aCB8fCAncm9vdCd9LmApO1xuXG4gICAgY29uc3QgaXNBbGxvd2VkID0gW0Zvcm1Hcm91cCwgRm9ybUNvbnRyb2xdLnNvbWUodHlwZSA9PiBjb250cm9sIGluc3RhbmNlb2YgdHlwZSk7XG4gICAgaWYgKCFpc0FsbG93ZWQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gY29udHJvbCB0eXBlIGF0OiAke3BhdGggfHwgJ3Jvb3QnfWApO1xuXG4gICAgY29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgY29udHJvbC5tYXJrQXNEaXJ0eSgpO1xuICAgIGNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IGVtaXRFdmVudDogdHJ1ZSB9KTtcblxuICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUdyb3VwKSB7XG4gICAgICBPYmplY3QudmFsdWVzKGNvbnRyb2wuY29udHJvbHMpLmZvckVhY2goKGNoaWxkQ29udHJvbCkgPT4ge1xuICAgICAgICB0aGlzLnZhbGlkYXRlRmllbGRzKGNoaWxkQ29udHJvbCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udHJvbC52YWxpZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gR2VuZXJhdGVzIHZhbGlkYXRvcnMgZnJvbSBjb21wb25lbnQgcHJvcGVydGllcy5cbiAgICogQHN1bW1hcnkgQ3JlYXRlcyBhbiBhcnJheSBvZiBWYWxpZGF0b3JGbiBiYXNlZCBvbiB0aGUgc3VwcG9ydGVkIHZhbGlkYXRpb24ga2V5cyBpbiB0aGUgY29tcG9uZW50IHByb3BlcnRpZXMuXG4gICAqIEBwYXJhbSB7RmllbGRQcm9wZXJ0aWVzfSBwcm9wcyAtIFRoZSBjb21wb25lbnQgcHJvcGVydGllcy5cbiAgICogQHJldHVybiB7VmFsaWRhdG9yRm5bXX0gQW4gYXJyYXkgb2YgdmFsaWRhdG9yIGZ1bmN0aW9ucy5cbiAgICovXG4gIHByaXZhdGUgc3RhdGljIHZhbGlkYXRvcnNGcm9tUHJvcHMocHJvcHM6IEZpZWxkUHJvcGVydGllcyk6IFZhbGlkYXRvckZuW10ge1xuICAgIGNvbnN0IHN1cHBvcnRlZFZhbGlkYXRpb25LZXlzID0gVmFsaWRhdGlvbi5rZXlzKCk7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHByb3BzKVxuICAgICAgLmZpbHRlcigoazogc3RyaW5nKSA9PiBzdXBwb3J0ZWRWYWxpZGF0aW9uS2V5cy5pbmNsdWRlcyhrKSlcbiAgICAgIC5tYXAoKGs6IHN0cmluZykgPT4ge1xuICAgICAgICByZXR1cm4gVmFsaWRhdG9yRmFjdG9yeS5zcGF3bihwcm9wcywgayk7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIEZvcm1Db250cm9sIGZyb20gY29tcG9uZW50IHByb3BlcnRpZXMuXG4gICAqIEBzdW1tYXJ5IEdlbmVyYXRlcyBhIEZvcm1Db250cm9sIHdpdGggdmFsaWRhdG9ycyBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgY29tcG9uZW50IHByb3BlcnRpZXMuXG4gICAqIEBwYXJhbSB7RmllbGRQcm9wZXJ0aWVzfSBwcm9wcyAtIFRoZSBjb21wb25lbnQgcHJvcGVydGllcy5cbiAgICogQHBhcmFtIHtGaWVsZFVwZGF0ZU1vZGV9IFt1cGRhdGVNb2RlPSdjaGFuZ2UnXSAtIFRoZSB1cGRhdGUgbW9kZSBmb3IgdGhlIGNvbnRyb2wuXG4gICAqIEByZXR1cm4ge0Zvcm1Db250cm9sfSBUaGUgY3JlYXRlZCBGb3JtQ29udHJvbC5cbiAgICovXG4gIHN0YXRpYyBmcm9tUHJvcHMocHJvcHM6IEZpZWxkUHJvcGVydGllcywgdXBkYXRlTW9kZTogRmllbGRVcGRhdGVNb2RlID0gJ2NoYW5nZScpOiBGb3JtQ29udHJvbCB7XG4gICAgY29uc3QgdmFsaWRhdG9ycyA9IHRoaXMudmFsaWRhdG9yc0Zyb21Qcm9wcyhwcm9wcyk7XG4gICAgY29uc3QgY29tcG9zZWQgPSB2YWxpZGF0b3JzLmxlbmd0aCA/IFZhbGlkYXRvcnMuY29tcG9zZSh2YWxpZGF0b3JzKSA6IG51bGw7XG4gICAgcmV0dXJuIG5ldyBGb3JtQ29udHJvbChcbiAgICAgIHtcbiAgICAgICAgdmFsdWU6XG4gICAgICAgICAgcHJvcHMudmFsdWUgJiYgcHJvcHMudHlwZSAhPT0gSFRNTDVJbnB1dFR5cGVzLkNIRUNLQk9YXG4gICAgICAgICAgICA/IHByb3BzLnR5cGUgPT09IEhUTUw1SW5wdXRUeXBlcy5EQVRFXG4gICAgICAgICAgICAgID8gIWlzVmFsaWREYXRlKHBhcnNlRGF0ZShwcm9wcy5mb3JtYXQgYXMgc3RyaW5nLCBwcm9wcy52YWx1ZSBhcyBzdHJpbmcpKVxuICAgICAgICAgICAgICAgID8gdW5kZWZpbmVkIDogcHJvcHMudmFsdWUgOlxuICAgICAgICAgICAgICAocHJvcHMudmFsdWUgYXMgdW5rbm93bikgOiB1bmRlZmluZWQsXG4gICAgICAgIGRpc2FibGVkOiBwcm9wcy5kaXNhYmxlZCxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHZhbGlkYXRvcnM6IGNvbXBvc2VkLFxuICAgICAgICB1cGRhdGVPbjogdXBkYXRlTW9kZSxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmV0cmlldmVzIHByb3BlcnRpZXMgZnJvbSBhIEZvcm1Db250cm9sLlxuICAgKiBAc3VtbWFyeSBHZXRzIHRoZSBGaWVsZFByb3BlcnRpZXMgYXNzb2NpYXRlZCB3aXRoIGEgRm9ybUNvbnRyb2wgZnJvbSB0aGUgaW50ZXJuYWwgV2Vha01hcC5cbiAgICogQHBhcmFtIHtGb3JtQ29udHJvbH0gY29udHJvbCAtIFRoZSBGb3JtQ29udHJvbCB0byBnZXQgcHJvcGVydGllcyBmb3IuXG4gICAqIEByZXR1cm4ge0ZpZWxkUHJvcGVydGllc30gVGhlIHByb3BlcnRpZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBjb250cm9sLlxuICAgKi9cbiAgc3RhdGljIGdldFByb3BzRnJvbUNvbnRyb2woY29udHJvbDogRm9ybUNvbnRyb2wpOiBGaWVsZFByb3BlcnRpZXMge1xuICAgIHJldHVybiB0aGlzLmNvbnRyb2xzLmdldChjb250cm9sKSB8fCB7fSBhcyBGaWVsZFByb3BlcnRpZXM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEZpbmRzIGEgcGFyZW50IGVsZW1lbnQgd2l0aCBhIHNwZWNpZmljIHRhZy5cbiAgICogQHN1bW1hcnkgVHJhdmVyc2VzIHVwIHRoZSBET00gdHJlZSB0byBmaW5kIHRoZSBuZWFyZXN0IHBhcmVudCBlbGVtZW50IHdpdGggdGhlIHNwZWNpZmllZCB0YWcuXG4gICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsIC0gVGhlIHN0YXJ0aW5nIGVsZW1lbnQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWcgLSBUaGUgdGFnIG5hbWUgdG8gc2VhcmNoIGZvci5cbiAgICogQHJldHVybiB7SFRNTEVsZW1lbnR9IFRoZSBmb3VuZCBwYXJlbnQgZWxlbWVudC5cbiAgICogQHRocm93cyB7RXJyb3J9IElmIG5vIHBhcmVudCB3aXRoIHRoZSBzcGVjaWZpZWQgdGFnIGlzIGZvdW5kLlxuICAgKi9cbiAgc3RhdGljIGdldFBhcmVudEVsKGVsOiBIVE1MRWxlbWVudCwgdGFnOiBzdHJpbmcpIHtcbiAgICBsZXQgcGFyZW50OiBIVE1MRWxlbWVudCB8IG51bGw7XG4gICAgd2hpbGUgKChwYXJlbnQgPSBlbC5wYXJlbnRFbGVtZW50KSAhPT0gbnVsbCkge1xuICAgICAgaWYgKHBhcmVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09IHRhZy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgICB9XG4gICAgICBlbCA9IHBhcmVudDtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYE5vIHBhcmVudCB3aXRoIHRoZSB0YWcgJHt0YWd9IHdhcyBmb3VuZCBmb3IgcHJvdmlkZWQgZWxlbWVudGAsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVnaXN0ZXJzIGEgY29udHJvbCB3aXRoIGl0cyBwcm9wZXJ0aWVzLlxuICAgKiBAc3VtbWFyeSBBc3NvY2lhdGVzIGEgY29udHJvbCB3aXRoIGl0cyBwcm9wZXJ0aWVzIGluIHRoZSBpbnRlcm5hbCBXZWFrTWFwLlxuICAgKiBAcGFyYW0ge0Fic3RyYWN0Q29udHJvbH0gY29udHJvbCAtIFRoZSBjb250cm9sIHRvIHJlZ2lzdGVyLlxuICAgKiBAcGFyYW0ge0ZpZWxkUHJvcGVydGllc30gcHJvcHMgLSBUaGUgcHJvcGVydGllcyB0byBhc3NvY2lhdGUgd2l0aCB0aGUgY29udHJvbC5cbiAgICovXG4gIHN0YXRpYyByZWdpc3Rlcihjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsIHByb3BzOiBGaWVsZFByb3BlcnRpZXMpIHtcbiAgICB0aGlzLmNvbnRyb2xzLnNldChjb250cm9sLCBwcm9wcyk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFVucmVnaXN0ZXJzIGEgY29udHJvbC5cbiAgICogQHN1bW1hcnkgUmVtb3ZlcyBhIGNvbnRyb2wgYW5kIGl0cyBhc3NvY2lhdGVkIHByb3BlcnRpZXMgZnJvbSB0aGUgaW50ZXJuYWwgV2Vha01hcC5cbiAgICogQHBhcmFtIHtBYnN0cmFjdENvbnRyb2x9IGNvbnRyb2wgLSBUaGUgY29udHJvbCB0byB1bnJlZ2lzdGVyLlxuICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSBjb250cm9sIHdhcyBzdWNjZXNzZnVsbHkgdW5yZWdpc3RlcmVkLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqL1xuICBzdGF0aWMgdW5yZWdpc3Rlcihjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jb250cm9scy5kZWxldGUoY29udHJvbCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJlc2V0cyBhIGZvcm0gZ3JvdXAuXG4gICAqIEBzdW1tYXJ5IFJlY3Vyc2l2ZWx5IHJlc2V0cyBhbGwgY29udHJvbHMgaW4gYSBmb3JtIGdyb3VwLCBjbGVhcmluZyB2YWx1ZXMsIGVycm9ycywgYW5kIG1hcmtpbmcgdGhlbSBhcyBwcmlzdGluZSBhbmQgdW50b3VjaGVkLlxuICAgKiBAcGFyYW0ge0Zvcm1Hcm91cH0gZm9ybUdyb3VwIC0gVGhlIGZvcm0gZ3JvdXAgdG8gcmVzZXQuXG4gICAqL1xuICBzdGF0aWMgcmVzZXQoZm9ybUdyb3VwOiBGb3JtR3JvdXApIHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBmb3JtR3JvdXAuY29udHJvbHMpIHtcbiAgICAgIGNvbnN0IGNvbnRyb2wgPSBmb3JtR3JvdXAuY29udHJvbHNba2V5XTtcbiAgICAgIGlmICghKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQ29udHJvbCkpIHtcbiAgICAgICAgTmd4Rm9ybVNlcnZpY2UucmVzZXQoY29udHJvbCBhcyBGb3JtR3JvdXApO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgeyB0eXBlIH0gPSBOZ3hGb3JtU2VydmljZS5nZXRQcm9wc0Zyb21Db250cm9sKGNvbnRyb2wpO1xuICAgICAgaWYgKCFIVE1MNUNoZWNrVHlwZXMuaW5jbHVkZXModHlwZSkpXG4gICAgICAgIGNvbnRyb2wuc2V0VmFsdWUodW5kZWZpbmVkKTtcbiAgICAgIGNvbnRyb2wubWFya0FzUHJpc3RpbmUoKTtcbiAgICAgIGNvbnRyb2wubWFya0FzVW50b3VjaGVkKCk7XG4gICAgICBjb250cm9sLnNldEVycm9ycyhudWxsKTtcbiAgICAgIGNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2VuZ2luZS90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW9uQ2hlY2tib3gsIElvbklucHV0LCBJb25TZWxlY3QsIElvblRleHRhcmVhIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHsgVGV4dEZpZWxkVHlwZXMgfSBmcm9tICdAaW9uaWMvY29yZSc7XG5pbXBvcnQgeyBFbnZpcm9ubWVudEluamVjdG9yLCBJbmplY3RvciwgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEZpZWxkUHJvcGVydGllcyB9IGZyb20gJ0BkZWNhZi10cy91aS1kZWNvcmF0b3JzJztcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCB0eXBlIEtleVZhbHVlID0gUmVjb3JkPHN0cmluZywgYW55PjtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCB0eXBlIEZ1bmN0aW9uTGlrZSA9ICguLi5hcmdzOiBhbnlbXSkgPT4gYW55O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBFbGVtZW50IHNpemUgb3B0aW9ucyBmb3IgVUkgY29tcG9uZW50c1xuICogQHN1bW1hcnkgRGVmaW5lcyB0aGUgcG9zc2libGUgc2l6ZSB2YWx1ZXMgdGhhdCBjYW4gYmUgYXBwbGllZCB0byBVSSBlbGVtZW50cy5cbiAqIFRoZXNlIHNpemVzIGNvbnRyb2wgdGhlIGRpbWVuc2lvbnMgYW5kIGxheW91dCBiZWhhdmlvciBvZiBjb21wb25lbnRzLlxuICogQHR5cGVkZWYgeygnc21hbGwnfCdtZWRpdW0nfCdsYXJnZSd8J3hsYXJnZSd8JzJ4bGFyZ2UnfCdhdXRvJ3wnZXhwYW5kJ3wnYmxvY2snKX0gRWxlbWVudFNpemVzXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmVuZ2luZVxuICovXG5leHBvcnQgdHlwZSBFbGVtZW50U2l6ZXMgPVxuICB8ICdzbWFsbCdcbiAgfCAnbWVkaXVtJ1xuICB8ICdsYXJnZSdcbiAgfCAneGxhcmdlJ1xuICB8ICcyeGxhcmdlJ1xuICB8ICdhdXRvJ1xuICB8ICdleHBhbmQnXG4gIHwgJ2Jsb2NrJztcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQmFzaWMgcG9zaXRpb24gb3B0aW9ucyBmb3IgVUkgZWxlbWVudHNcbiAqIEBzdW1tYXJ5IERlZmluZXMgdGhlIHBvc3NpYmxlIHBvc2l0aW9uIHZhbHVlcyB0aGF0IGNhbiBiZSBhcHBsaWVkIHRvIFVJIGVsZW1lbnRzLlxuICogVGhlc2UgcG9zaXRpb25zIGNvbnRyb2wgdGhlIGFsaWdubWVudCBhbmQgcGxhY2VtZW50IG9mIGNvbXBvbmVudHMuXG4gKiBAdHlwZWRlZiB7KCdsZWZ0J3wnY2VudGVyJ3wncmlnaHQnfCd0b3AnfCdib3R0b20nKX0gRWxlbWVudFBvc2l0aW9uc1xuICogQG1lbWJlck9mIG1vZHVsZTplbmdpbmVcbiAqL1xuZXhwb3J0IHR5cGUgRWxlbWVudFBvc2l0aW9ucyA9ICdsZWZ0JyB8ICdjZW50ZXInIHwgJ3JpZ2h0JyB8ICd0b3AnIHwgJ2JvdHRvbSc7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEV4dGVuZGVkIHBvc2l0aW9uIG9wdGlvbnMgZm9yIGZsZXggbGF5b3V0c1xuICogQHN1bW1hcnkgRXh0ZW5kcyB0aGUgYmFzaWMgRWxlbWVudFBvc2l0aW9ucyB3aXRoIGFkZGl0aW9uYWwgZmxleC1zcGVjaWZpYyBwb3NpdGlvbiB2YWx1ZXMuXG4gKiBUaGVzZSBwb3NpdGlvbnMgYXJlIHVzZWQgZm9yIGNvbnRyb2xsaW5nIGFsaWdubWVudCBhbmQgZGlzdHJpYnV0aW9uIGluIGZsZXggY29udGFpbmVycy5cbiAqIEB0eXBlZGVmIHsoRWxlbWVudFBvc2l0aW9uc3wnc3RyZXRjaCd8J21pZGRsZSd8J2Fyb3VuZCd8J2JldHdlZW4nKX0gRmxleFBvc2l0aW9uc1xuICogQG1lbWJlck9mIG1vZHVsZTplbmdpbmVcbiAqL1xuZXhwb3J0IHR5cGUgRmxleFBvc2l0aW9ucyA9XG4gIHwgRWxlbWVudFBvc2l0aW9uc1xuICB8ICdzdHJldGNoJ1xuICB8ICdtaWRkbGUnXG4gIHwgJ2Fyb3VuZCdcbiAgfCAnYmV0d2Vlbic7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFVwZGF0ZSBtb2RlIG9wdGlvbnMgZm9yIGZvcm0gZmllbGRzXG4gKiBAc3VtbWFyeSBEZWZpbmVzIHdoZW4gZm9ybSBmaWVsZCB2YWx1ZXMgc2hvdWxkIGJlIHVwZGF0ZWQgaW4gdGhlIG1vZGVsLlxuICogLSAnY2hhbmdlJzogVXBkYXRlIG9uIGV2ZXJ5IGNoYW5nZSBldmVudFxuICogLSAnYmx1cic6IFVwZGF0ZSB3aGVuIHRoZSBmaWVsZCBsb3NlcyBmb2N1c1xuICogLSAnc3VibWl0JzogVXBkYXRlIG9ubHkgd2hlbiB0aGUgZm9ybSBpcyBzdWJtaXR0ZWRcbiAqIEB0eXBlZGVmIHsoJ2NoYW5nZSd8J2JsdXInfCdzdWJtaXQnKX0gRmllbGRVcGRhdGVNb2RlXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmVuZ2luZVxuICovXG5leHBvcnQgdHlwZSBGaWVsZFVwZGF0ZU1vZGUgPSAnY2hhbmdlJyB8ICdibHVyJyB8ICdzdWJtaXQnO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBNZXRhZGF0YSBzdHJ1Y3R1cmUgZm9yIEFuZ3VsYXIgY29tcG9uZW50c1xuICogQHN1bW1hcnkgRGVmaW5lcyB0aGUgc3RydWN0dXJlIG9mIG1ldGFkYXRhIGZvciBBbmd1bGFyIGNvbXBvbmVudHMsIGluY2x1ZGluZ1xuICogY2hhbmdlIGRldGVjdGlvbiBzdHJhdGVneSwgc2VsZWN0b3IsIHN0YW5kYWxvbmUgc3RhdHVzLCBpbXBvcnRzLCB0ZW1wbGF0ZSwgYW5kIHN0eWxlcy5cbiAqIFRoaXMgaXMgdXNlZCBmb3IgcmVmbGVjdGlvbiBhbmQgZHluYW1pYyBjb21wb25lbnQgY3JlYXRpb24uXG4gKiBAaW50ZXJmYWNlIENvbXBvbmVudE1ldGFkYXRhXG4gKiBAcHJvcGVydHkge251bWJlcn0gY2hhbmdlRGV0ZWN0aW9uIC0gVGhlIGNoYW5nZSBkZXRlY3Rpb24gc3RyYXRlZ3kgbnVtYmVyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gc2VsZWN0b3IgLSBUaGUgQ1NTIHNlbGVjdG9yIGZvciB0aGUgY29tcG9uZW50XG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHN0YW5kYWxvbmUgLSBXaGV0aGVyIHRoZSBjb21wb25lbnQgaXMgc3RhbmRhbG9uZVxuICogQHByb3BlcnR5IGltcG9ydHMgLSBBcnJheSBvZiBpbXBvcnRlZCBtb2R1bGVzL2NvbXBvbmVudHNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0ZW1wbGF0ZSAtIFRoZSBIVE1MIHRlbXBsYXRlIGZvciB0aGUgY29tcG9uZW50XG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBzdHlsZXMgLSBBcnJheSBvZiBDU1Mgc3R5bGVzIGZvciB0aGUgY29tcG9uZW50XG4gKiBAbWVtYmVyT2YgbW9kdWxlOmVuZ2luZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudE1ldGFkYXRhIHtcbiAgY2hhbmdlRGV0ZWN0aW9uOiBudW1iZXI7XG4gIHNlbGVjdG9yOiBzdHJpbmc7XG4gIHN0YW5kYWxvbmU6IGJvb2xlYW47XG4gIGltcG9ydHM6IChuZXcgKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gdW5rbm93bilbXTtcbiAgdGVtcGxhdGU6IHN0cmluZztcbiAgc3R5bGVzOiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gT3V0cHV0IHN0cnVjdHVyZSBmcm9tIHRoZSBBbmd1bGFyIHJlbmRlcmluZyBlbmdpbmVcbiAqIEBzdW1tYXJ5IERlZmluZXMgdGhlIHN0cnVjdHVyZSBvZiB0aGUgb3V0cHV0IHByb2R1Y2VkIGJ5IHRoZSBOZ3hSZW5kZXJpbmdFbmdpbmVcbiAqIHdoZW4gcmVuZGVyaW5nIGEgY29tcG9uZW50LiBDb250YWlucyB0aGUgY29tcG9uZW50IHR5cGUsIGlucHV0cywgaW5qZWN0b3IsXG4gKiBjb250ZW50IG5vZGVzLCBhbmQgY2hpbGQgY29tcG9uZW50cy5cbiAqIEB0eXBlZGVmIHtPYmplY3R9IEFuZ3VsYXJEeW5hbWljT3V0cHV0XG4gKiBAcHJvcGVydHkge1R5cGU8dW5rbm93bj59IGNvbXBvbmVudCAtIFRoZSBBbmd1bGFyIGNvbXBvbmVudCB0eXBlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3JlbmRlcmVySWRdIC0gT3B0aW9uYWwgdW5pcXVlIElEIGZvciB0aGUgcmVuZGVyZWQgY29tcG9uZW50XG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsIHVua25vd24+fSBbaW5wdXRzXSAtIE9wdGlvbmFsIGlucHV0IHByb3BlcnRpZXMgZm9yIHRoZSBjb21wb25lbnRcbiAqIEBwcm9wZXJ0eSB7SW5qZWN0b3J9IFtpbmplY3Rvcl0gLSBPcHRpb25hbCBBbmd1bGFyIGluamVjdG9yIGZvciBkZXBlbmRlbmN5IGluamVjdGlvblxuICogQHByb3BlcnR5IHtOb2RlW11bXX0gW2NvbnRlbnRdIC0gT3B0aW9uYWwgY29udGVudCBub2RlcyBmb3IgcHJvamVjdGlvblxuICogQHByb3BlcnR5IHtBbmd1bGFyRHluYW1pY091dHB1dFtdfSBbY2hpbGRyZW5dIC0gT3B0aW9uYWwgY2hpbGQgY29tcG9uZW50c1xuICogQHByb3BlcnR5IHtUeXBlPHVua25vd24+fSBbaW5zdGFuY2VdIC0gT3B0aW9uYWwgY29tcG9uZW50IGluc3RhbmNlXG4gKiBAcHJvcGVydHkge0Zvcm1Hcm91cH0gW2Zvcm1Hcm91cF0gLSBPcHRpb25hbCBjb21wb25lbnQgRm9ybUdyb3VwXG4gKiBAcHJvcGVydHkge0Zvcm1Db250cm9sfSBbZm9ybUNvbnRyb2xdIC0gT3B0aW9uYWwgY29tcG9uZW50IEZvcm1Db250cm9sXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmVuZ2luZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFuZ3VsYXJEeW5hbWljT3V0cHV0IHtcbiAgY29tcG9uZW50OiBUeXBlPHVua25vd24+O1xuICByZW5kZXJlcklkPzogc3RyaW5nO1xuICBpbnB1dHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgaW5qZWN0b3I/OiBJbmplY3RvcjtcbiAgY29udGVudD86IE5vZGVbXVtdO1xuICBjaGlsZHJlbj86IEFuZ3VsYXJEeW5hbWljT3V0cHV0W107XG4gIGluc3RhbmNlPzogVHlwZTx1bmtub3duPjtcbiAgZm9ybUdyb3VwPzogRm9ybUdyb3VwO1xuICBmb3JtQ29udHJvbD86IEZvcm1Db250cm9sO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBJbnRlcmZhY2UgZm9yIG1vZGVscyB0aGF0IGNhbiBiZSByZW5kZXJlZFxuICogQHN1bW1hcnkgRGVmaW5lcyB0aGUgYmFzaWMgc3RydWN0dXJlIGZvciBtb2RlbHMgdGhhdCBjYW4gYmUgcmVuZGVyZWQgYnkgdGhlIGVuZ2luZS5cbiAqIENvbnRhaW5zIGFuIG9wdGlvbmFsIHJlbmRlcmVySWQgdGhhdCB1bmlxdWVseSBpZGVudGlmaWVzIHRoZSByZW5kZXJlZCBpbnN0YW5jZS5cbiAqIEBpbnRlcmZhY2UgUmVuZGVyZWRNb2RlbFxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtyZW5kZXJlcklkXSAtIE9wdGlvbmFsIHVuaXF1ZSBJRCBmb3IgdGhlIHJlbmRlcmVkIG1vZGVsIGluc3RhbmNlXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmVuZ2luZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlbmRlcmVkTW9kZWwge1xuICByZW5kZXJlcklkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBQb3NzaWJsZSBpbnB1dCB0eXBlcyBmb3IgZm9ybSBmaWVsZHNcbiAqIEBzdW1tYXJ5IERlZmluZXMgdGhlIHBvc3NpYmxlIGlucHV0IHR5cGVzIHRoYXQgY2FuIGJlIHVzZWQgaW4gZm9ybSBmaWVsZHMuXG4gKiBJbmNsdWRlcyBzdGFuZGFyZCBIVE1MIGlucHV0IHR5cGVzIGxpa2UgY2hlY2tib3gsIHJhZGlvLCBhbmQgc2VsZWN0LFxuICogYXMgd2VsbCBhcyBJb25pYydzIFRleHRGaWVsZFR5cGVzIGFuZCB0ZXh0YXJlYS5cbiAqIEB0eXBlZGVmIHsoJ2NoZWNrYm94J3wncmFkaW8nfCdzZWxlY3QnfFRleHRGaWVsZFR5cGVzfCd0ZXh0YXJlYScpfSBQb3NzaWJsZUlucHV0VHlwZXNcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZW5naW5lXG4gKi9cbmV4cG9ydCB0eXBlIFBvc3NpYmxlSW5wdXRUeXBlcyA9XG4gIHwgJ2NoZWNrYm94J1xuICB8ICdyYWRpbydcbiAgfCAnc2VsZWN0J1xuICB8IFRleHRGaWVsZFR5cGVzXG4gIHwgJ3RleHRhcmVhJztcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRmllbGQgZGVmaW5pdGlvbiBmb3IgQW5ndWxhciBjb21wb25lbnRzXG4gKiBAc3VtbWFyeSBBIGNvbXByZWhlbnNpdmUgdHlwZSB0aGF0IGNvbWJpbmVzIHByb3BlcnRpZXMgZnJvbSB2YXJpb3VzIElvbmljIGNvbXBvbmVudHNcbiAqIHRvIGRlZmluZSB0aGUgc3RydWN0dXJlIG9mIGEgZmllbGQgaW4gYW4gQW5ndWxhciBmb3JtLiBJdCBvbWl0cyBjZXJ0YWluIHByb3BlcnRpZXNcbiAqIGZyb20gSW9uSW5wdXQsIHBpY2tzIHNwZWNpZmljIHByb3BlcnRpZXMgZnJvbSBJb25TZWxlY3QsIElvblRleHRhcmVhLCBhbmQgSW9uQ2hlY2tib3gsXG4gKiBhbmQgYWRkcyBjdXN0b20gcHJvcGVydGllcyBsaWtlIHR5cGUgYW5kIGNsYXNzTmFtZS5cbiAqIEB0eXBlZGVmIHtPYmplY3R9IEFuZ3VsYXJGaWVsZERlZmluaXRpb25cbiAqIEBwcm9wZXJ0eSB7UG9zc2libGVJbnB1dFR5cGVzfSB0eXBlIC0gVGhlIHR5cGUgb2YgaW5wdXQgZmllbGRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfHN0cmluZ1tdfSBjbGFzc05hbWUgLSBDU1MgY2xhc3MgbmFtZShzKSBmb3IgdGhlIGZpZWxkXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2NhbmNlbFRleHRdIC0gVGV4dCBmb3IgdGhlIGNhbmNlbCBidXR0b24gKGZyb20gSW9uU2VsZWN0KVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtpbnRlcmZhY2VdIC0gSW50ZXJmYWNlIHN0eWxlIGZvciBzZWxlY3QgKGZyb20gSW9uU2VsZWN0KVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtzZWxlY3RlZFRleHRdIC0gVGV4dCBmb3Igc2VsZWN0ZWQgb3B0aW9uIChmcm9tIElvblNlbGVjdClcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBbaW50ZXJmYWNlT3B0aW9uc10gLSBPcHRpb25zIGZvciB0aGUgaW50ZXJmYWNlIChmcm9tIElvblNlbGVjdClcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbcm93c10gLSBOdW1iZXIgb2Ygcm93cyBmb3IgdGV4dGFyZWEgKGZyb20gSW9uVGV4dGFyZWEpXG4gKiBAcHJvcGVydHkge251bWJlcn0gW2NvbHNdIC0gTnVtYmVyIG9mIGNvbHVtbnMgZm9yIHRleHRhcmVhIChmcm9tIElvblRleHRhcmVhKVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFthbGlnbm1lbnRdIC0gQWxpZ25tZW50IG9mIGNoZWNrYm94IChmcm9tIElvbkNoZWNrYm94KVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtqdXN0aWZ5XSAtIEp1c3RpZmljYXRpb24gb2YgY2hlY2tib3ggKGZyb20gSW9uQ2hlY2tib3gpXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtjaGVja2VkXSAtIFdoZXRoZXIgY2hlY2tib3ggaXMgY2hlY2tlZCAoZnJvbSBJb25DaGVja2JveClcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZW5naW5lXG4gKi9cbmV4cG9ydCB0eXBlIEFuZ3VsYXJGaWVsZERlZmluaXRpb24gPSBPbWl0PFxuICBJb25JbnB1dCxcbiAgfCAnaW9uSW5wdXQnXG4gIHwgJ2lvbkZvY3VzJ1xuICB8ICdpb25DaGFuZ2UnXG4gIHwgJ2lvbkJsdXInXG4gIHwgJ2dldElucHV0RWxlbWVudCdcbiAgfCAnc2V0Rm9jdXMnXG4gIHwgJ2xhYmVsJ1xuICB8ICdlbCdcbiAgfCAneidcbiAgfCAndHlwZSdcbj4gJlxuICBQaWNrPFxuICAgIElvblNlbGVjdCxcbiAgICAnY2FuY2VsVGV4dCcgfCAnaW50ZXJmYWNlJyB8ICdzZWxlY3RlZFRleHQnIHwgJ2ludGVyZmFjZU9wdGlvbnMnXG4gID4gJlxuICBQaWNrPElvblRleHRhcmVhLCAncm93cycgfCAnY29scyc+ICZcbiAgUGljazxJb25DaGVja2JveCwgJ2FsaWdubWVudCcgfCAnanVzdGlmeScgfCAnY2hlY2tlZCc+ICYge1xuICB0eXBlOiBQb3NzaWJsZUlucHV0VHlwZXM7XG4gIGNsYXNzTmFtZTogc3RyaW5nIHwgc3RyaW5nW107XG59ICYgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFN0cmluZyBvciBib29sZWFuIHJlcHJlc2VudGF0aW9uIG9mIGEgYm9vbGVhbiB2YWx1ZVxuICogQHN1bW1hcnkgUmVwcmVzZW50cyBhIHZhbHVlIHRoYXQgY2FuIGJlIGVpdGhlciBhIGJvb2xlYW4gb3IgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBib29sZWFuLlxuICogVGhpcyBpcyB1c2VmdWwgZm9yIGhhbmRsaW5nIGF0dHJpYnV0ZSB2YWx1ZXMgdGhhdCBjYW4gYmUgc3BlY2lmaWVkIGFzIGVpdGhlciBzdHJpbmdzIG9yIGJvb2xlYW5zLlxuICogQHR5cGVkZWYgeygndHJ1ZSd8J2ZhbHNlJ3xib29sZWFuKX0gU3RyaW5nT3JCb29sZWFuXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmVuZ2luZVxuICovXG5leHBvcnQgdHlwZSBTdHJpbmdPckJvb2xlYW4gPSAndHJ1ZScgfCAnZmFsc2UnIHwgYm9vbGVhbjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gT3B0aW9uIHR5cGUgZm9yIHNlbGVjdCBpbnB1dHNcbiAqIEBzdW1tYXJ5IEV4dGVuZHMgdGhlIElucHV0T3B0aW9uIGludGVyZmFjZSB3aXRoIGEgc2VsZWN0ZWQgcHJvcGVydHkgdG8gaW5kaWNhdGVcbiAqIHdoZXRoZXIgdGhlIG9wdGlvbiBpcyBzZWxlY3RlZCBieSBkZWZhdWx0LlxuICogQG1lbWJlck9mIG1vZHVsZTplbmdpbmVcbiAqL1xuZXhwb3J0IHR5cGUgU2VsZWN0T3B0aW9uID0gSW5wdXRPcHRpb24gJiB7IHNlbGVjdGVkPzogYm9vbGVhbiB9O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBPcHRpb24gdHlwZSBmb3IgcmFkaW8gaW5wdXRzXG4gKiBAc3VtbWFyeSBFeHRlbmRzIHRoZSBJbnB1dE9wdGlvbiBpbnRlcmZhY2Ugd2l0aCBhIGNoZWNrZWQgcHJvcGVydHkgdG8gaW5kaWNhdGVcbiAqIHdoZXRoZXIgdGhlIG9wdGlvbiBpcyBjaGVja2VkIGJ5IGRlZmF1bHQuXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmVuZ2luZVxuICovXG5leHBvcnQgdHlwZSBSYWRpb09wdGlvbiA9IElucHV0T3B0aW9uICYgeyBjaGVja2VkPzogYm9vbGVhbiB9O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBPcHRpb24gdHlwZSBmb3IgY2hlY2tib3ggaW5wdXRzXG4gKiBAc3VtbWFyeSBBbGlhcyBmb3IgUmFkaW9PcHRpb24sIGFzIGNoZWNrYm94IG9wdGlvbnMgaGF2ZSB0aGUgc2FtZSBzdHJ1Y3R1cmUgYXMgcmFkaW8gb3B0aW9ucy5cbiAqIEB0eXBlZGVmIHtSYWRpb09wdGlvbn0gQ2hlY2tib3hPcHRpb25cbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZW5naW5lXG4gKi9cbmV4cG9ydCB0eXBlIENoZWNrYm94T3B0aW9uID0gUmFkaW9PcHRpb247XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEJhc2Ugb3B0aW9uIHR5cGUgZm9yIGlucHV0IGNvbXBvbmVudHNcbiAqIEBzdW1tYXJ5IERlZmluZXMgdGhlIGNvbW1vbiBzdHJ1Y3R1cmUgZm9yIG9wdGlvbnMgdXNlZCBpbiBzZWxlY3QsIHJhZGlvLCBhbmQgY2hlY2tib3ggaW5wdXRzLlxuICogQ29udGFpbnMgcHJvcGVydGllcyBmb3IgdGhlIGRpc3BsYXkgdGV4dCwgdmFsdWUsIGRpc2FibGVkIHN0YXRlLCBDU1MgY2xhc3MsIGFuZCBpY29uLlxuICogQGludGVyZmFjZSBJbnB1dE9wdGlvblxuICogQHByb3BlcnR5IHtzdHJpbmd9IHRleHQgLSBUaGUgZGlzcGxheSB0ZXh0IGZvciB0aGUgb3B0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ3xudW1iZXJ9IHZhbHVlIC0gVGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGUgb3B0aW9uXG4gKiBAcHJvcGVydHkge1N0cmluZ09yQm9vbGVhbn0gW2Rpc2FibGVkXSAtIFdoZXRoZXIgdGhlIG9wdGlvbiBpcyBkaXNhYmxlZFxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtjbGFzc05hbWVdIC0gQ1NTIGNsYXNzIG5hbWUgZm9yIHN0eWxpbmcgdGhlIG9wdGlvblxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtpY29uXSAtIEljb24gdG8gZGlzcGxheSB3aXRoIHRoZSBvcHRpb25cbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZW5naW5lXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5wdXRPcHRpb24ge1xuICB0ZXh0OiBzdHJpbmc7XG4gIHZhbHVlOiBzdHJpbmcgfCBudW1iZXI7XG4gIGRpc2FibGVkPzogU3RyaW5nT3JCb29sZWFuO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGljb24/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFRhcmdldCBvcHRpb25zIGZvciBIVE1MIGZvcm1zXG4gKiBAc3VtbWFyeSBEZWZpbmVzIHRoZSBwb3NzaWJsZSB0YXJnZXQgdmFsdWVzIGZvciBIVE1MIGZvcm1zLCBpbmNsdWRpbmcgc3RhbmRhcmQgdGFyZ2V0c1xuICogbGlrZSAnX2JsYW5rJywgJ19zZWxmJywgJ19wYXJlbnQnLCBhbmQgJ190b3AnLCBhcyB3ZWxsIGFzIGN1c3RvbSBzdHJpbmcgdmFsdWVzLlxuICogQHR5cGVkZWYgeygnX2JsYW5rJ3wnX3NlbGYnfCdfcGFyZW50J3wnX3RvcCd8c3RyaW5nKX0gSFRNTEZvcm1UYXJnZXRcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZW5naW5lXG4gKi9cbmV4cG9ydCB0eXBlIEhUTUxGb3JtVGFyZ2V0ID0gJ19ibGFuaycgfCAnX3NlbGYnIHwgJ19wYXJlbnQnIHwgJ190b3AnIHwgc3RyaW5nO1xuXG4vLyBleHBvcnQgaW50ZXJmYWNlIElMaXN0SXRlbVByb3Age1xuLy8gICByZW5kZXI/OiBzdHJpbmcgfCBib29sZWFuO1xuLy8gICB0cmFuc2xhdGVQcm9wcz86IHN0cmluZyB8IHN0cmluZ1tdO1xuLy8gICBidXR0b24/OiBTdHJpbmdPckJvb2xlYW47XG4vLyAgIGljb24/OiBzdHJpbmc7XG4vLyAgIGljb25TbG90PzogJ3N0YXJ0JyB8ICdlbmQnO1xuLy8gICB0aXRsZT86IHN0cmluZztcbi8vICAgZGVzY3JpdHBpb24/OiBzdHJpbmc7XG4vLyAgIGluZm8/OiBzdHJpbmc7XG4vLyAgIHN1YmluZm8/OiBzdHJpbmc7XG4vLyB9XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEludGVyZmFjZSBmb3IgbGlzdCBjb21wb25lbnQgcmVmcmVzaCBldmVudHNcbiAqIEBzdW1tYXJ5IERlZmluZXMgdGhlIHN0cnVjdHVyZSBvZiBhIHJlZnJlc2ggZXZlbnQgZm9yIGxpc3QgY29tcG9uZW50cy5cbiAqIENvbnRhaW5zIGFuIGFycmF5IG9mIGtleS12YWx1ZSBwYWlycyByZXByZXNlbnRpbmcgdGhlIG5ldyBkYXRhIGZvciB0aGUgbGlzdC5cbiAqIEBpbnRlcmZhY2UgSUxpc3RDb21wb25lbnRSZWZyZXNoRXZlbnRcbiAqIEBwcm9wZXJ0eSB7S2V5VmFsdWVbXX0gZGF0YSAtIEFycmF5IG9mIGtleS12YWx1ZSBwYWlycyByZXByZXNlbnRpbmcgdGhlIG5ldyBkYXRhXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmVuZ2luZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIElMaXN0Q29tcG9uZW50UmVmcmVzaEV2ZW50IHtcbiAgZGF0YTogS2V5VmFsdWVbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGb3JtU2VydmljZUNvbnRyb2wge1xuICBjb250cm9sOiBGb3JtR3JvdXA7XG4gIHByb3BzOiBBbmd1bGFyRmllbGREZWZpbml0aW9uO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBUeXBlIGZvciBmb3JtIHNlcnZpY2UgY29udHJvbHNcbiAqIEBzdW1tYXJ5IERlZmluZXMgdGhlIHN0cnVjdHVyZSBvZiBmb3JtIGNvbnRyb2xzIG1hbmFnZWQgYnkgdGhlIGZvcm0gc2VydmljZS5cbiAqIEl0J3MgYSBuZXN0ZWQgcmVjb3JkIHdoZXJlIHRoZSBvdXRlciBrZXkgaXMgdGhlIGZvcm0gZ3JvdXAgbmFtZSwgdGhlIGlubmVyIGtleVxuICogaXMgdGhlIGNvbnRyb2wgbmFtZSwgYW5kIHRoZSB2YWx1ZSBjb250YWlucyB0aGUgZm9ybSBncm91cCBhbmQgZmllbGQgcHJvcGVydGllcy5cbiAqIEB0eXBlZGVmIHtSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB7IGNvbnRyb2w6IEZvcm1Hcm91cDsgcHJvcHM6IEFuZ3VsYXJGaWVsZERlZmluaXRpb24gfT4+fSBGb3JtU2VydmljZUNvbnRyb2xzXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmVuZ2luZVxuICovXG5leHBvcnQgdHlwZSBGb3JtU2VydmljZUNvbnRyb2xzID0gUmVjb3JkPFxuICBzdHJpbmcsXG4gIFJlY29yZDxzdHJpbmcsIEZvcm1TZXJ2aWNlQ29udHJvbD5cbj47XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEludGVyZmFjZSBmb3IgbW9kZWwgcmVuZGVyIGN1c3RvbSBldmVudHNcbiAqIEBzdW1tYXJ5IERlZmluZXMgdGhlIHN0cnVjdHVyZSBvZiBjdXN0b20gZXZlbnRzIHRyaWdnZXJlZCBkdXJpbmcgbW9kZWwgcmVuZGVyaW5nLlxuICogQ29udGFpbnMgdGhlIGV2ZW50IGRldGFpbCwgY29tcG9uZW50IG5hbWUsIGFuZCBldmVudCBuYW1lLlxuICogQGludGVyZmFjZSBNb2RlbFJlbmRlckN1c3RvbUV2ZW50XG4gKiBAcHJvcGVydHkge0Jhc2VDdXN0b21FdmVudH0gZGV0YWlsIC0gVGhlIGRldGFpbGVkIGV2ZW50IGluZm9ybWF0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gY29tcG9uZW50IC0gVGhlIGNvbXBvbmVudCB0aGF0IHRyaWdnZXJlZCB0aGUgZXZlbnRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGV2ZW50XG4gKiBAbWVtYmVyT2YgbW9kdWxlOmVuZ2luZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1vZGVsUmVuZGVyQ3VzdG9tRXZlbnQge1xuICBkZXRhaWw6IEJhc2VDdXN0b21FdmVudDtcbiAgY29tcG9uZW50OiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gSW50ZXJmYWNlIGZvciBsaXN0IGl0ZW0gY3VzdG9tIGV2ZW50c1xuICogQHN1bW1hcnkgRGVmaW5lcyB0aGUgc3RydWN0dXJlIG9mIGN1c3RvbSBldmVudHMgdHJpZ2dlcmVkIGJ5IGxpc3QgaXRlbXMuXG4gKiBFeHRlbmRzIEJhc2VDdXN0b21FdmVudCB3aXRoIGFkZGl0aW9uYWwgcHJvcGVydGllcyBmb3IgdGhlIGFjdGlvbiBhbmQgcHJpbWFyeSBrZXkuXG4gKiBAaW50ZXJmYWNlIExpc3RJdGVtQ3VzdG9tRXZlbnRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhY3Rpb24gLSBUaGUgYWN0aW9uIHBlcmZvcm1lZCBvbiB0aGUgbGlzdCBpdGVtXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3BrXSAtIE9wdGlvbmFsIHByaW1hcnkga2V5IG9mIHRoZSBhZmZlY3RlZCBpdGVtXG4gKiBAcHJvcGVydHkge2FueX0gZGF0YSAtIFRoZSBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUgZXZlbnQgKGluaGVyaXRlZCBmcm9tIEJhc2VDdXN0b21FdmVudClcbiAqIEBwcm9wZXJ0eSB7SFRNTEVsZW1lbnR9IFt0YXJnZXRdIC0gVGhlIHRhcmdldCBlbGVtZW50IChpbmhlcml0ZWQgZnJvbSBCYXNlQ3VzdG9tRXZlbnQpXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW25hbWVdIC0gVGhlIG5hbWUgb2YgdGhlIGV2ZW50IChpbmhlcml0ZWQgZnJvbSBCYXNlQ3VzdG9tRXZlbnQpXG4gKiBAcHJvcGVydHkge3N0cmluZ30gY29tcG9uZW50IC0gVGhlIGNvbXBvbmVudCB0aGF0IHRyaWdnZXJlZCB0aGUgZXZlbnQgKGluaGVyaXRlZCBmcm9tIEJhc2VDdXN0b21FdmVudClcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZW5naW5lXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGlzdEl0ZW1DdXN0b21FdmVudCBleHRlbmRzIEJhc2VDdXN0b21FdmVudCB7XG4gIGFjdGlvbjogc3RyaW5nO1xuICBwaz86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQmFzZSBpbnRlcmZhY2UgZm9yIGN1c3RvbSBldmVudHNcbiAqIEBzdW1tYXJ5IERlZmluZXMgdGhlIGJhc2Ugc3RydWN0dXJlIGZvciBjdXN0b20gZXZlbnRzIGluIHRoZSBhcHBsaWNhdGlvbi5cbiAqIENvbnRhaW5zIHByb3BlcnRpZXMgZm9yIHRoZSBldmVudCBkYXRhLCB0YXJnZXQgZWxlbWVudCwgbmFtZSwgYW5kIGNvbXBvbmVudC5cbiAqIEBpbnRlcmZhY2UgQmFzZUN1c3RvbUV2ZW50XG4gKiBAcHJvcGVydHkge2FueX0gZGF0YSAtIFRoZSBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUgZXZlbnRcbiAqIEBwcm9wZXJ0eSB7SFRNTEVsZW1lbnR9IFt0YXJnZXRdIC0gVGhlIHRhcmdldCBlbGVtZW50IHRoYXQgdHJpZ2dlcmVkIHRoZSBldmVudFxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtuYW1lXSAtIFRoZSBuYW1lIG9mIHRoZSBldmVudFxuICogQHByb3BlcnR5IHtzdHJpbmd9IGNvbXBvbmVudCAtIFRoZSBjb21wb25lbnQgdGhhdCB0cmlnZ2VyZWQgdGhlIGV2ZW50XG4gKiBAbWVtYmVyT2YgbW9kdWxlOmVuZ2luZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VDdXN0b21FdmVudCB7XG4gIGRhdGE6IHVua25vd247XG4gIHRhcmdldD86IEhUTUxFbGVtZW50O1xuICBuYW1lPzogc3RyaW5nO1xuICBjb21wb25lbnQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQmFzZSBpbnRlcmZhY2UgZm9yIGN1c3RvbSBldmVudHNcbiAqIEBzdW1tYXJ5IERlZmluZXMgdGhlIGJhc2Ugc3RydWN0dXJlIGZvciBjdXN0b20gZXZlbnRzIGluIHRoZSBhcHBsaWNhdGlvbi5cbiAqIENvbnRhaW5zIHByb3BlcnRpZXMgZm9yIHRoZSBldmVudCBkYXRhLCB0YXJnZXQgZWxlbWVudCwgbmFtZSwgYW5kIGNvbXBvbmVudC5cbiAqIEBpbnRlcmZhY2UgQmFzZUN1c3RvbUV2ZW50XG4gKiBAcHJvcGVydHkge2FueX0gZGF0YSAtIFRoZSBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUgZXZlbnRcbiAqIEBwcm9wZXJ0eSB7SFRNTEVsZW1lbnR9IFt0YXJnZXRdIC0gVGhlIHRhcmdldCBlbGVtZW50IHRoYXQgdHJpZ2dlcmVkIHRoZSBldmVudFxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtuYW1lXSAtIFRoZSBuYW1lIG9mIHRoZSBldmVudFxuICogQHByb3BlcnR5IHtzdHJpbmd9IGNvbXBvbmVudCAtIFRoZSBjb21wb25lbnQgdGhhdCB0cmlnZ2VyZWQgdGhlIGV2ZW50XG4gKiBAbWVtYmVyT2YgbW9kdWxlOmVuZ2luZVxuICovXG5leHBvcnQgdHlwZSBDcnVkRm9ybUV2ZW50ID0gQmFzZUN1c3RvbUV2ZW50ICYge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBoYW5kbGVycz86IFJlY29yZDxzdHJpbmcsIGFueT47XG59O1xuXG5cblxuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnRJbnB1dCBleHRlbmRzIEZpZWxkUHJvcGVydGllcyB7XG4gIHVwZGF0ZU1vZGU/OiBGaWVsZFVwZGF0ZU1vZGU7XG4gIGZvcm1Hcm91cD86IEZvcm1Hcm91cDtcbiAgZm9ybUNvbnRyb2w/OiBGb3JtQ29udHJvbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnRDb25maWcge1xuICBjb21wb25lbnQ6IHN0cmluZztcbiAgaW5wdXRzOiBDb21wb25lbnRJbnB1dDtcbiAgaW5qZWN0b3I6IEVudmlyb25tZW50SW5qZWN0b3IgfCBJbmplY3RvcjtcbiAgY2hpbGRyZW4/OiBDb21wb25lbnRDb25maWdbXTtcbn1cblxuZXhwb3J0IHR5cGUgRm9ybVBhcmVudEdyb3VwID0gW0Zvcm1Hcm91cCwgIHN0cmluZ107XG5cblxuXG4iXX0=
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2VuZ2luZS90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW9uQ2hlY2tib3gsIElvbklucHV0LCBJb25TZWxlY3QsIElvblRleHRhcmVhIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHsgVGV4dEZpZWxkVHlwZXMgfSBmcm9tICdAaW9uaWMvY29yZSc7XG5pbXBvcnQgeyBFbnZpcm9ubWVudEluamVjdG9yLCBJbmplY3RvciwgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEZpZWxkUHJvcGVydGllcyB9IGZyb20gJ0BkZWNhZi10cy91aS1kZWNvcmF0b3JzJztcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gR2VuZXJpYyBrZXktdmFsdWUgcGFpciB0eXBlXG4gKiBAc3VtbWFyeSBSZXByZXNlbnRzIGEgZ2VuZXJpYyBvYmplY3Qgd2l0aCBzdHJpbmcga2V5cyBhbmQgYW55IHR5cGUgb2YgdmFsdWVzLlxuICogVGhpcyBpcyBjb21tb25seSB1c2VkIGZvciBkeW5hbWljIGRhdGEgc3RydWN0dXJlcyB3aGVyZSB0aGUgcHJvcGVydGllcyBhcmUgbm90IGtub3duIGF0IGNvbXBpbGUgdGltZS5cbiAqIEB0eXBlZGVmIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBLZXlWYWx1ZVxuICogQG1lbWJlck9mIG1vZHVsZTplbmdpbmVcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCB0eXBlIEtleVZhbHVlID0gUmVjb3JkPHN0cmluZywgYW55PjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gR2VuZXJpYyBmdW5jdGlvbiB0eXBlXG4gKiBAc3VtbWFyeSBSZXByZXNlbnRzIGEgZnVuY3Rpb24gdGhhdCBhY2NlcHRzIGFueSBudW1iZXIgb2YgYXJndW1lbnRzIG9mIGFueSB0eXBlXG4gKiBhbmQgcmV0dXJucyBhbnkgdHlwZS4gVGhpcyBpcyB1c2VmdWwgZm9yIGRlZmluaW5nIGZ1bmN0aW9uIHBhcmFtZXRlcnMgb3IgdmFyaWFibGVzXG4gKiB3aGVyZSB0aGUgZXhhY3QgZnVuY3Rpb24gc2lnbmF0dXJlIGlzIG5vdCBrbm93biBhdCBjb21waWxlIHRpbWUuXG4gKiBAdHlwZWRlZiBGdW5jdGlvbkxpa2VcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZW5naW5lXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5leHBvcnQgdHlwZSBGdW5jdGlvbkxpa2UgPSAoLi4uYXJnczogYW55W10pID0+IGFueTtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRWxlbWVudCBzaXplIG9wdGlvbnMgZm9yIFVJIGNvbXBvbmVudHNcbiAqIEBzdW1tYXJ5IERlZmluZXMgdGhlIHBvc3NpYmxlIHNpemUgdmFsdWVzIHRoYXQgY2FuIGJlIGFwcGxpZWQgdG8gVUkgZWxlbWVudHMuXG4gKiBUaGVzZSBzaXplcyBjb250cm9sIHRoZSBkaW1lbnNpb25zIGFuZCBsYXlvdXQgYmVoYXZpb3Igb2YgY29tcG9uZW50cy5cbiAqIEB0eXBlZGVmIHsoJ3NtYWxsJ3wnbWVkaXVtJ3wnbGFyZ2UnfCd4bGFyZ2UnfCcyeGxhcmdlJ3wnYXV0byd8J2V4cGFuZCd8J2Jsb2NrJyl9IEVsZW1lbnRTaXplc1xuICogQG1lbWJlck9mIG1vZHVsZTplbmdpbmVcbiAqL1xuZXhwb3J0IHR5cGUgRWxlbWVudFNpemVzID1cbiAgfCAnc21hbGwnXG4gIHwgJ21lZGl1bSdcbiAgfCAnbGFyZ2UnXG4gIHwgJ3hsYXJnZSdcbiAgfCAnMnhsYXJnZSdcbiAgfCAnYXV0bydcbiAgfCAnZXhwYW5kJ1xuICB8ICdibG9jayc7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEJhc2ljIHBvc2l0aW9uIG9wdGlvbnMgZm9yIFVJIGVsZW1lbnRzXG4gKiBAc3VtbWFyeSBEZWZpbmVzIHRoZSBwb3NzaWJsZSBwb3NpdGlvbiB2YWx1ZXMgdGhhdCBjYW4gYmUgYXBwbGllZCB0byBVSSBlbGVtZW50cy5cbiAqIFRoZXNlIHBvc2l0aW9ucyBjb250cm9sIHRoZSBhbGlnbm1lbnQgYW5kIHBsYWNlbWVudCBvZiBjb21wb25lbnRzLlxuICogQHR5cGVkZWYgeygnbGVmdCd8J2NlbnRlcid8J3JpZ2h0J3wndG9wJ3wnYm90dG9tJyl9IEVsZW1lbnRQb3NpdGlvbnNcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZW5naW5lXG4gKi9cbmV4cG9ydCB0eXBlIEVsZW1lbnRQb3NpdGlvbnMgPSAnbGVmdCcgfCAnY2VudGVyJyB8ICdyaWdodCcgfCAndG9wJyB8ICdib3R0b20nO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBFeHRlbmRlZCBwb3NpdGlvbiBvcHRpb25zIGZvciBmbGV4IGxheW91dHNcbiAqIEBzdW1tYXJ5IEV4dGVuZHMgdGhlIGJhc2ljIEVsZW1lbnRQb3NpdGlvbnMgd2l0aCBhZGRpdGlvbmFsIGZsZXgtc3BlY2lmaWMgcG9zaXRpb24gdmFsdWVzLlxuICogVGhlc2UgcG9zaXRpb25zIGFyZSB1c2VkIGZvciBjb250cm9sbGluZyBhbGlnbm1lbnQgYW5kIGRpc3RyaWJ1dGlvbiBpbiBmbGV4IGNvbnRhaW5lcnMuXG4gKiBAdHlwZWRlZiB7KEVsZW1lbnRQb3NpdGlvbnN8J3N0cmV0Y2gnfCdtaWRkbGUnfCdhcm91bmQnfCdiZXR3ZWVuJyl9IEZsZXhQb3NpdGlvbnNcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZW5naW5lXG4gKi9cbmV4cG9ydCB0eXBlIEZsZXhQb3NpdGlvbnMgPVxuICB8IEVsZW1lbnRQb3NpdGlvbnNcbiAgfCAnc3RyZXRjaCdcbiAgfCAnbWlkZGxlJ1xuICB8ICdhcm91bmQnXG4gIHwgJ2JldHdlZW4nO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBVcGRhdGUgbW9kZSBvcHRpb25zIGZvciBmb3JtIGZpZWxkc1xuICogQHN1bW1hcnkgRGVmaW5lcyB3aGVuIGZvcm0gZmllbGQgdmFsdWVzIHNob3VsZCBiZSB1cGRhdGVkIGluIHRoZSBtb2RlbC5cbiAqIC0gJ2NoYW5nZSc6IFVwZGF0ZSBvbiBldmVyeSBjaGFuZ2UgZXZlbnRcbiAqIC0gJ2JsdXInOiBVcGRhdGUgd2hlbiB0aGUgZmllbGQgbG9zZXMgZm9jdXNcbiAqIC0gJ3N1Ym1pdCc6IFVwZGF0ZSBvbmx5IHdoZW4gdGhlIGZvcm0gaXMgc3VibWl0dGVkXG4gKiBAdHlwZWRlZiB7KCdjaGFuZ2UnfCdibHVyJ3wnc3VibWl0Jyl9IEZpZWxkVXBkYXRlTW9kZVxuICogQG1lbWJlck9mIG1vZHVsZTplbmdpbmVcbiAqL1xuZXhwb3J0IHR5cGUgRmllbGRVcGRhdGVNb2RlID0gJ2NoYW5nZScgfCAnYmx1cicgfCAnc3VibWl0JztcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gTWV0YWRhdGEgc3RydWN0dXJlIGZvciBBbmd1bGFyIGNvbXBvbmVudHNcbiAqIEBzdW1tYXJ5IERlZmluZXMgdGhlIHN0cnVjdHVyZSBvZiBtZXRhZGF0YSBmb3IgQW5ndWxhciBjb21wb25lbnRzLCBpbmNsdWRpbmdcbiAqIGNoYW5nZSBkZXRlY3Rpb24gc3RyYXRlZ3ksIHNlbGVjdG9yLCBzdGFuZGFsb25lIHN0YXR1cywgaW1wb3J0cywgdGVtcGxhdGUsIGFuZCBzdHlsZXMuXG4gKiBUaGlzIGlzIHVzZWQgZm9yIHJlZmxlY3Rpb24gYW5kIGR5bmFtaWMgY29tcG9uZW50IGNyZWF0aW9uLlxuICogQGludGVyZmFjZSBDb21wb25lbnRNZXRhZGF0YVxuICogQHByb3BlcnR5IHtudW1iZXJ9IGNoYW5nZURldGVjdGlvbiAtIFRoZSBjaGFuZ2UgZGV0ZWN0aW9uIHN0cmF0ZWd5IG51bWJlclxuICogQHByb3BlcnR5IHtzdHJpbmd9IHNlbGVjdG9yIC0gVGhlIENTUyBzZWxlY3RvciBmb3IgdGhlIGNvbXBvbmVudFxuICogQHByb3BlcnR5IHtib29sZWFufSBzdGFuZGFsb25lIC0gV2hldGhlciB0aGUgY29tcG9uZW50IGlzIHN0YW5kYWxvbmVcbiAqIEBwcm9wZXJ0eSBpbXBvcnRzIC0gQXJyYXkgb2YgaW1wb3J0ZWQgbW9kdWxlcy9jb21wb25lbnRzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdGVtcGxhdGUgLSBUaGUgSFRNTCB0ZW1wbGF0ZSBmb3IgdGhlIGNvbXBvbmVudFxuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gc3R5bGVzIC0gQXJyYXkgb2YgQ1NTIHN0eWxlcyBmb3IgdGhlIGNvbXBvbmVudFxuICogQG1lbWJlck9mIG1vZHVsZTplbmdpbmVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnRNZXRhZGF0YSB7XG4gIGNoYW5nZURldGVjdGlvbjogbnVtYmVyO1xuICBzZWxlY3Rvcjogc3RyaW5nO1xuICBzdGFuZGFsb25lOiBib29sZWFuO1xuICBpbXBvcnRzOiAobmV3ICguLi5hcmdzOiB1bmtub3duW10pID0+IHVua25vd24pW107XG4gIHRlbXBsYXRlOiBzdHJpbmc7XG4gIHN0eWxlczogc3RyaW5nW107XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIE91dHB1dCBzdHJ1Y3R1cmUgZnJvbSB0aGUgQW5ndWxhciByZW5kZXJpbmcgZW5naW5lXG4gKiBAc3VtbWFyeSBEZWZpbmVzIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIG91dHB1dCBwcm9kdWNlZCBieSB0aGUgTmd4UmVuZGVyaW5nRW5naW5lXG4gKiB3aGVuIHJlbmRlcmluZyBhIGNvbXBvbmVudC4gQ29udGFpbnMgdGhlIGNvbXBvbmVudCB0eXBlLCBpbnB1dHMsIGluamVjdG9yLFxuICogY29udGVudCBub2RlcywgYW5kIGNoaWxkIGNvbXBvbmVudHMuXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBBbmd1bGFyRHluYW1pY091dHB1dFxuICogQHByb3BlcnR5IHtUeXBlPHVua25vd24+fSBjb21wb25lbnQgLSBUaGUgQW5ndWxhciBjb21wb25lbnQgdHlwZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtyZW5kZXJlcklkXSAtIE9wdGlvbmFsIHVuaXF1ZSBJRCBmb3IgdGhlIHJlbmRlcmVkIGNvbXBvbmVudFxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn0gW2lucHV0c10gLSBPcHRpb25hbCBpbnB1dCBwcm9wZXJ0aWVzIGZvciB0aGUgY29tcG9uZW50XG4gKiBAcHJvcGVydHkge0luamVjdG9yfSBbaW5qZWN0b3JdIC0gT3B0aW9uYWwgQW5ndWxhciBpbmplY3RvciBmb3IgZGVwZW5kZW5jeSBpbmplY3Rpb25cbiAqIEBwcm9wZXJ0eSB7Tm9kZVtdW119IFtjb250ZW50XSAtIE9wdGlvbmFsIGNvbnRlbnQgbm9kZXMgZm9yIHByb2plY3Rpb25cbiAqIEBwcm9wZXJ0eSB7QW5ndWxhckR5bmFtaWNPdXRwdXRbXX0gW2NoaWxkcmVuXSAtIE9wdGlvbmFsIGNoaWxkIGNvbXBvbmVudHNcbiAqIEBwcm9wZXJ0eSB7VHlwZTx1bmtub3duPn0gW2luc3RhbmNlXSAtIE9wdGlvbmFsIGNvbXBvbmVudCBpbnN0YW5jZVxuICogQHByb3BlcnR5IHtGb3JtR3JvdXB9IFtmb3JtR3JvdXBdIC0gT3B0aW9uYWwgY29tcG9uZW50IEZvcm1Hcm91cFxuICogQHByb3BlcnR5IHtGb3JtQ29udHJvbH0gW2Zvcm1Db250cm9sXSAtIE9wdGlvbmFsIGNvbXBvbmVudCBGb3JtQ29udHJvbFxuICogQG1lbWJlck9mIG1vZHVsZTplbmdpbmVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBbmd1bGFyRHluYW1pY091dHB1dCB7XG4gIGNvbXBvbmVudDogVHlwZTx1bmtub3duPjtcbiAgcmVuZGVyZXJJZD86IHN0cmluZztcbiAgaW5wdXRzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGluamVjdG9yPzogSW5qZWN0b3I7XG4gIGNvbnRlbnQ/OiBOb2RlW11bXTtcbiAgY2hpbGRyZW4/OiBBbmd1bGFyRHluYW1pY091dHB1dFtdO1xuICBpbnN0YW5jZT86IFR5cGU8dW5rbm93bj47XG4gIGZvcm1Hcm91cD86IEZvcm1Hcm91cDtcbiAgZm9ybUNvbnRyb2w/OiBGb3JtQ29udHJvbDtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gSW50ZXJmYWNlIGZvciBtb2RlbHMgdGhhdCBjYW4gYmUgcmVuZGVyZWRcbiAqIEBzdW1tYXJ5IERlZmluZXMgdGhlIGJhc2ljIHN0cnVjdHVyZSBmb3IgbW9kZWxzIHRoYXQgY2FuIGJlIHJlbmRlcmVkIGJ5IHRoZSBlbmdpbmUuXG4gKiBDb250YWlucyBhbiBvcHRpb25hbCByZW5kZXJlcklkIHRoYXQgdW5pcXVlbHkgaWRlbnRpZmllcyB0aGUgcmVuZGVyZWQgaW5zdGFuY2UuXG4gKiBAaW50ZXJmYWNlIFJlbmRlcmVkTW9kZWxcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbcmVuZGVyZXJJZF0gLSBPcHRpb25hbCB1bmlxdWUgSUQgZm9yIHRoZSByZW5kZXJlZCBtb2RlbCBpbnN0YW5jZVxuICogQG1lbWJlck9mIG1vZHVsZTplbmdpbmVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZW5kZXJlZE1vZGVsIHtcbiAgcmVuZGVyZXJJZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUG9zc2libGUgaW5wdXQgdHlwZXMgZm9yIGZvcm0gZmllbGRzXG4gKiBAc3VtbWFyeSBEZWZpbmVzIHRoZSBwb3NzaWJsZSBpbnB1dCB0eXBlcyB0aGF0IGNhbiBiZSB1c2VkIGluIGZvcm0gZmllbGRzLlxuICogSW5jbHVkZXMgc3RhbmRhcmQgSFRNTCBpbnB1dCB0eXBlcyBsaWtlIGNoZWNrYm94LCByYWRpbywgYW5kIHNlbGVjdCxcbiAqIGFzIHdlbGwgYXMgSW9uaWMncyBUZXh0RmllbGRUeXBlcyBhbmQgdGV4dGFyZWEuXG4gKiBAdHlwZWRlZiB7KCdjaGVja2JveCd8J3JhZGlvJ3wnc2VsZWN0J3xUZXh0RmllbGRUeXBlc3wndGV4dGFyZWEnKX0gUG9zc2libGVJbnB1dFR5cGVzXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmVuZ2luZVxuICovXG5leHBvcnQgdHlwZSBQb3NzaWJsZUlucHV0VHlwZXMgPVxuICB8ICdjaGVja2JveCdcbiAgfCAncmFkaW8nXG4gIHwgJ3NlbGVjdCdcbiAgfCBUZXh0RmllbGRUeXBlc1xuICB8ICd0ZXh0YXJlYSc7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEZpZWxkIGRlZmluaXRpb24gZm9yIEFuZ3VsYXIgY29tcG9uZW50c1xuICogQHN1bW1hcnkgQSBjb21wcmVoZW5zaXZlIHR5cGUgdGhhdCBjb21iaW5lcyBwcm9wZXJ0aWVzIGZyb20gdmFyaW91cyBJb25pYyBjb21wb25lbnRzXG4gKiB0byBkZWZpbmUgdGhlIHN0cnVjdHVyZSBvZiBhIGZpZWxkIGluIGFuIEFuZ3VsYXIgZm9ybS4gSXQgb21pdHMgY2VydGFpbiBwcm9wZXJ0aWVzXG4gKiBmcm9tIElvbklucHV0LCBwaWNrcyBzcGVjaWZpYyBwcm9wZXJ0aWVzIGZyb20gSW9uU2VsZWN0LCBJb25UZXh0YXJlYSwgYW5kIElvbkNoZWNrYm94LFxuICogYW5kIGFkZHMgY3VzdG9tIHByb3BlcnRpZXMgbGlrZSB0eXBlIGFuZCBjbGFzc05hbWUuXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBBbmd1bGFyRmllbGREZWZpbml0aW9uXG4gKiBAcHJvcGVydHkge1Bvc3NpYmxlSW5wdXRUeXBlc30gdHlwZSAtIFRoZSB0eXBlIG9mIGlucHV0IGZpZWxkXG4gKiBAcHJvcGVydHkge3N0cmluZ3xzdHJpbmdbXX0gY2xhc3NOYW1lIC0gQ1NTIGNsYXNzIG5hbWUocykgZm9yIHRoZSBmaWVsZFxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtjYW5jZWxUZXh0XSAtIFRleHQgZm9yIHRoZSBjYW5jZWwgYnV0dG9uIChmcm9tIElvblNlbGVjdClcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbaW50ZXJmYWNlXSAtIEludGVyZmFjZSBzdHlsZSBmb3Igc2VsZWN0IChmcm9tIElvblNlbGVjdClcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbc2VsZWN0ZWRUZXh0XSAtIFRleHQgZm9yIHNlbGVjdGVkIG9wdGlvbiAoZnJvbSBJb25TZWxlY3QpXG4gKiBAcHJvcGVydHkge09iamVjdH0gW2ludGVyZmFjZU9wdGlvbnNdIC0gT3B0aW9ucyBmb3IgdGhlIGludGVyZmFjZSAoZnJvbSBJb25TZWxlY3QpXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3Jvd3NdIC0gTnVtYmVyIG9mIHJvd3MgZm9yIHRleHRhcmVhIChmcm9tIElvblRleHRhcmVhKVxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtjb2xzXSAtIE51bWJlciBvZiBjb2x1bW5zIGZvciB0ZXh0YXJlYSAoZnJvbSBJb25UZXh0YXJlYSlcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbYWxpZ25tZW50XSAtIEFsaWdubWVudCBvZiBjaGVja2JveCAoZnJvbSBJb25DaGVja2JveClcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbanVzdGlmeV0gLSBKdXN0aWZpY2F0aW9uIG9mIGNoZWNrYm94IChmcm9tIElvbkNoZWNrYm94KVxuICogQHByb3BlcnR5IHtib29sZWFufSBbY2hlY2tlZF0gLSBXaGV0aGVyIGNoZWNrYm94IGlzIGNoZWNrZWQgKGZyb20gSW9uQ2hlY2tib3gpXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmVuZ2luZVxuICovXG5leHBvcnQgdHlwZSBBbmd1bGFyRmllbGREZWZpbml0aW9uID0gT21pdDxcbiAgSW9uSW5wdXQsXG4gIHwgJ2lvbklucHV0J1xuICB8ICdpb25Gb2N1cydcbiAgfCAnaW9uQ2hhbmdlJ1xuICB8ICdpb25CbHVyJ1xuICB8ICdnZXRJbnB1dEVsZW1lbnQnXG4gIHwgJ3NldEZvY3VzJ1xuICB8ICdsYWJlbCdcbiAgfCAnZWwnXG4gIHwgJ3onXG4gIHwgJ3R5cGUnXG4+ICZcbiAgUGljazxcbiAgICBJb25TZWxlY3QsXG4gICAgJ2NhbmNlbFRleHQnIHwgJ2ludGVyZmFjZScgfCAnc2VsZWN0ZWRUZXh0JyB8ICdpbnRlcmZhY2VPcHRpb25zJ1xuICA+ICZcbiAgUGljazxJb25UZXh0YXJlYSwgJ3Jvd3MnIHwgJ2NvbHMnPiAmXG4gIFBpY2s8SW9uQ2hlY2tib3gsICdhbGlnbm1lbnQnIHwgJ2p1c3RpZnknIHwgJ2NoZWNrZWQnPiAmIHtcbiAgdHlwZTogUG9zc2libGVJbnB1dFR5cGVzO1xuICBjbGFzc05hbWU6IHN0cmluZyB8IHN0cmluZ1tdO1xufSAmIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBTdHJpbmcgb3IgYm9vbGVhbiByZXByZXNlbnRhdGlvbiBvZiBhIGJvb2xlYW4gdmFsdWVcbiAqIEBzdW1tYXJ5IFJlcHJlc2VudHMgYSB2YWx1ZSB0aGF0IGNhbiBiZSBlaXRoZXIgYSBib29sZWFuIG9yIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgYm9vbGVhbi5cbiAqIFRoaXMgaXMgdXNlZnVsIGZvciBoYW5kbGluZyBhdHRyaWJ1dGUgdmFsdWVzIHRoYXQgY2FuIGJlIHNwZWNpZmllZCBhcyBlaXRoZXIgc3RyaW5ncyBvciBib29sZWFucy5cbiAqIEB0eXBlZGVmIHsoJ3RydWUnfCdmYWxzZSd8Ym9vbGVhbil9IFN0cmluZ09yQm9vbGVhblxuICogQG1lbWJlck9mIG1vZHVsZTplbmdpbmVcbiAqL1xuZXhwb3J0IHR5cGUgU3RyaW5nT3JCb29sZWFuID0gJ3RydWUnIHwgJ2ZhbHNlJyB8IGJvb2xlYW47XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIE9wdGlvbiB0eXBlIGZvciBzZWxlY3QgaW5wdXRzXG4gKiBAc3VtbWFyeSBFeHRlbmRzIHRoZSBJbnB1dE9wdGlvbiBpbnRlcmZhY2Ugd2l0aCBhIHNlbGVjdGVkIHByb3BlcnR5IHRvIGluZGljYXRlXG4gKiB3aGV0aGVyIHRoZSBvcHRpb24gaXMgc2VsZWN0ZWQgYnkgZGVmYXVsdC5cbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZW5naW5lXG4gKi9cbmV4cG9ydCB0eXBlIFNlbGVjdE9wdGlvbiA9IElucHV0T3B0aW9uICYgeyBzZWxlY3RlZD86IGJvb2xlYW4gfTtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gT3B0aW9uIHR5cGUgZm9yIHJhZGlvIGlucHV0c1xuICogQHN1bW1hcnkgRXh0ZW5kcyB0aGUgSW5wdXRPcHRpb24gaW50ZXJmYWNlIHdpdGggYSBjaGVja2VkIHByb3BlcnR5IHRvIGluZGljYXRlXG4gKiB3aGV0aGVyIHRoZSBvcHRpb24gaXMgY2hlY2tlZCBieSBkZWZhdWx0LlxuICogQG1lbWJlck9mIG1vZHVsZTplbmdpbmVcbiAqL1xuZXhwb3J0IHR5cGUgUmFkaW9PcHRpb24gPSBJbnB1dE9wdGlvbiAmIHsgY2hlY2tlZD86IGJvb2xlYW4gfTtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gT3B0aW9uIHR5cGUgZm9yIGNoZWNrYm94IGlucHV0c1xuICogQHN1bW1hcnkgQWxpYXMgZm9yIFJhZGlvT3B0aW9uLCBhcyBjaGVja2JveCBvcHRpb25zIGhhdmUgdGhlIHNhbWUgc3RydWN0dXJlIGFzIHJhZGlvIG9wdGlvbnMuXG4gKiBAdHlwZWRlZiB7UmFkaW9PcHRpb259IENoZWNrYm94T3B0aW9uXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmVuZ2luZVxuICovXG5leHBvcnQgdHlwZSBDaGVja2JveE9wdGlvbiA9IFJhZGlvT3B0aW9uO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBCYXNlIG9wdGlvbiB0eXBlIGZvciBpbnB1dCBjb21wb25lbnRzXG4gKiBAc3VtbWFyeSBEZWZpbmVzIHRoZSBjb21tb24gc3RydWN0dXJlIGZvciBvcHRpb25zIHVzZWQgaW4gc2VsZWN0LCByYWRpbywgYW5kIGNoZWNrYm94IGlucHV0cy5cbiAqIENvbnRhaW5zIHByb3BlcnRpZXMgZm9yIHRoZSBkaXNwbGF5IHRleHQsIHZhbHVlLCBkaXNhYmxlZCBzdGF0ZSwgQ1NTIGNsYXNzLCBhbmQgaWNvbi5cbiAqIEBpbnRlcmZhY2UgSW5wdXRPcHRpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0ZXh0IC0gVGhlIGRpc3BsYXkgdGV4dCBmb3IgdGhlIG9wdGlvblxuICogQHByb3BlcnR5IHtzdHJpbmd8bnVtYmVyfSB2YWx1ZSAtIFRoZSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIG9wdGlvblxuICogQHByb3BlcnR5IHtTdHJpbmdPckJvb2xlYW59IFtkaXNhYmxlZF0gLSBXaGV0aGVyIHRoZSBvcHRpb24gaXMgZGlzYWJsZWRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbY2xhc3NOYW1lXSAtIENTUyBjbGFzcyBuYW1lIGZvciBzdHlsaW5nIHRoZSBvcHRpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbaWNvbl0gLSBJY29uIHRvIGRpc3BsYXkgd2l0aCB0aGUgb3B0aW9uXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmVuZ2luZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIElucHV0T3B0aW9uIHtcbiAgdGV4dDogc3RyaW5nO1xuICB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyO1xuICBkaXNhYmxlZD86IFN0cmluZ09yQm9vbGVhbjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBpY29uPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBUYXJnZXQgb3B0aW9ucyBmb3IgSFRNTCBmb3Jtc1xuICogQHN1bW1hcnkgRGVmaW5lcyB0aGUgcG9zc2libGUgdGFyZ2V0IHZhbHVlcyBmb3IgSFRNTCBmb3JtcywgaW5jbHVkaW5nIHN0YW5kYXJkIHRhcmdldHNcbiAqIGxpa2UgJ19ibGFuaycsICdfc2VsZicsICdfcGFyZW50JywgYW5kICdfdG9wJywgYXMgd2VsbCBhcyBjdXN0b20gc3RyaW5nIHZhbHVlcy5cbiAqIEB0eXBlZGVmIHsoJ19ibGFuayd8J19zZWxmJ3wnX3BhcmVudCd8J190b3AnfHN0cmluZyl9IEhUTUxGb3JtVGFyZ2V0XG4gKiBAbWVtYmVyT2YgbW9kdWxlOmVuZ2luZVxuICovXG5leHBvcnQgdHlwZSBIVE1MRm9ybVRhcmdldCA9ICdfYmxhbmsnIHwgJ19zZWxmJyB8ICdfcGFyZW50JyB8ICdfdG9wJyB8IHN0cmluZztcblxuLy8gZXhwb3J0IGludGVyZmFjZSBJTGlzdEl0ZW1Qcm9wIHtcbi8vICAgcmVuZGVyPzogc3RyaW5nIHwgYm9vbGVhbjtcbi8vICAgdHJhbnNsYXRlUHJvcHM/OiBzdHJpbmcgfCBzdHJpbmdbXTtcbi8vICAgYnV0dG9uPzogU3RyaW5nT3JCb29sZWFuO1xuLy8gICBpY29uPzogc3RyaW5nO1xuLy8gICBpY29uU2xvdD86ICdzdGFydCcgfCAnZW5kJztcbi8vICAgdGl0bGU/OiBzdHJpbmc7XG4vLyAgIGRlc2NyaXRwaW9uPzogc3RyaW5nO1xuLy8gICBpbmZvPzogc3RyaW5nO1xuLy8gICBzdWJpbmZvPzogc3RyaW5nO1xuLy8gfVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBJbnRlcmZhY2UgZm9yIGxpc3QgY29tcG9uZW50IHJlZnJlc2ggZXZlbnRzXG4gKiBAc3VtbWFyeSBEZWZpbmVzIHRoZSBzdHJ1Y3R1cmUgb2YgYSByZWZyZXNoIGV2ZW50IGZvciBsaXN0IGNvbXBvbmVudHMuXG4gKiBDb250YWlucyBhbiBhcnJheSBvZiBrZXktdmFsdWUgcGFpcnMgcmVwcmVzZW50aW5nIHRoZSBuZXcgZGF0YSBmb3IgdGhlIGxpc3QuXG4gKiBAaW50ZXJmYWNlIElMaXN0Q29tcG9uZW50UmVmcmVzaEV2ZW50XG4gKiBAcHJvcGVydHkge0tleVZhbHVlW119IGRhdGEgLSBBcnJheSBvZiBrZXktdmFsdWUgcGFpcnMgcmVwcmVzZW50aW5nIHRoZSBuZXcgZGF0YVxuICogQG1lbWJlck9mIG1vZHVsZTplbmdpbmVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJTGlzdENvbXBvbmVudFJlZnJlc2hFdmVudCB7XG4gIGRhdGE6IEtleVZhbHVlW107XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEZvcm0gc2VydmljZSBjb250cm9sIHN0cnVjdHVyZVxuICogQHN1bW1hcnkgRGVmaW5lcyB0aGUgc3RydWN0dXJlIGZvciBhIGZvcm0gY29udHJvbCBtYW5hZ2VkIGJ5IHRoZSBmb3JtIHNlcnZpY2UuXG4gKiBDb250YWlucyB0aGUgRm9ybUdyb3VwIGNvbnRyb2wgYW5kIHRoZSBhc3NvY2lhdGVkIGZpZWxkIHByb3BlcnRpZXMgZm9yIHJlbmRlcmluZy5cbiAqIEBpbnRlcmZhY2UgRm9ybVNlcnZpY2VDb250cm9sXG4gKiBAcHJvcGVydHkge0Zvcm1Hcm91cH0gY29udHJvbCAtIFRoZSBBbmd1bGFyIEZvcm1Hcm91cCBmb3IgdGhlIGNvbnRyb2xcbiAqIEBwcm9wZXJ0eSB7QW5ndWxhckZpZWxkRGVmaW5pdGlvbn0gcHJvcHMgLSBUaGUgZmllbGQgcHJvcGVydGllcyBmb3IgcmVuZGVyaW5nIHRoZSBjb250cm9sXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmVuZ2luZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1TZXJ2aWNlQ29udHJvbCB7XG4gIGNvbnRyb2w6IEZvcm1Hcm91cDtcbiAgcHJvcHM6IEFuZ3VsYXJGaWVsZERlZmluaXRpb247XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFR5cGUgZm9yIGZvcm0gc2VydmljZSBjb250cm9sc1xuICogQHN1bW1hcnkgRGVmaW5lcyB0aGUgc3RydWN0dXJlIG9mIGZvcm0gY29udHJvbHMgbWFuYWdlZCBieSB0aGUgZm9ybSBzZXJ2aWNlLlxuICogSXQncyBhIG5lc3RlZCByZWNvcmQgd2hlcmUgdGhlIG91dGVyIGtleSBpcyB0aGUgZm9ybSBncm91cCBuYW1lLCB0aGUgaW5uZXIga2V5XG4gKiBpcyB0aGUgY29udHJvbCBuYW1lLCBhbmQgdGhlIHZhbHVlIGNvbnRhaW5zIHRoZSBmb3JtIGdyb3VwIGFuZCBmaWVsZCBwcm9wZXJ0aWVzLlxuICogQHR5cGVkZWYge1JlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHsgY29udHJvbDogRm9ybUdyb3VwOyBwcm9wczogQW5ndWxhckZpZWxkRGVmaW5pdGlvbiB9Pj59IEZvcm1TZXJ2aWNlQ29udHJvbHNcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZW5naW5lXG4gKi9cbmV4cG9ydCB0eXBlIEZvcm1TZXJ2aWNlQ29udHJvbHMgPSBSZWNvcmQ8XG4gIHN0cmluZyxcbiAgUmVjb3JkPHN0cmluZywgRm9ybVNlcnZpY2VDb250cm9sPlxuPjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUmVuZGVyZXIgY3VzdG9tIGV2ZW50IHR5cGVcbiAqIEBzdW1tYXJ5IENvbWJpbmVzIEJhc2VDdXN0b21FdmVudCB3aXRoIEtleVZhbHVlIHByb3BlcnRpZXMgdG8gY3JlYXRlIGEgZmxleGlibGVcbiAqIGN1c3RvbSBldmVudCB0eXBlIGZvciByZW5kZXJlciBjb21wb25lbnRzLiBUaGlzIGFsbG93cyBldmVudHMgdG8gY2FycnkgYm90aFxuICogc3RhbmRhcmQgZXZlbnQgcHJvcGVydGllcyBhbmQgYWRkaXRpb25hbCBjdXN0b20gZGF0YS5cbiAqIEB0eXBlZGVmIFJlbmRlcmVyQ3VzdG9tRXZlbnRcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZW5naW5lXG4gKi9cbmV4cG9ydCB0eXBlIFJlbmRlcmVyQ3VzdG9tRXZlbnQgPSBCYXNlQ3VzdG9tRXZlbnQgJiBLZXlWYWx1ZTtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gSW50ZXJmYWNlIGZvciBsaXN0IGl0ZW0gY3VzdG9tIGV2ZW50c1xuICogQHN1bW1hcnkgRGVmaW5lcyB0aGUgc3RydWN0dXJlIG9mIGN1c3RvbSBldmVudHMgdHJpZ2dlcmVkIGJ5IGxpc3QgaXRlbXMuXG4gKiBFeHRlbmRzIEJhc2VDdXN0b21FdmVudCB3aXRoIGFkZGl0aW9uYWwgcHJvcGVydGllcyBmb3IgdGhlIGFjdGlvbiBhbmQgcHJpbWFyeSBrZXkuXG4gKiBAaW50ZXJmYWNlIExpc3RJdGVtQ3VzdG9tRXZlbnRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhY3Rpb24gLSBUaGUgYWN0aW9uIHBlcmZvcm1lZCBvbiB0aGUgbGlzdCBpdGVtXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3BrXSAtIE9wdGlvbmFsIHByaW1hcnkga2V5IG9mIHRoZSBhZmZlY3RlZCBpdGVtXG4gKiBAcHJvcGVydHkge2FueX0gZGF0YSAtIFRoZSBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUgZXZlbnQgKGluaGVyaXRlZCBmcm9tIEJhc2VDdXN0b21FdmVudClcbiAqIEBwcm9wZXJ0eSB7SFRNTEVsZW1lbnR9IFt0YXJnZXRdIC0gVGhlIHRhcmdldCBlbGVtZW50IChpbmhlcml0ZWQgZnJvbSBCYXNlQ3VzdG9tRXZlbnQpXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW25hbWVdIC0gVGhlIG5hbWUgb2YgdGhlIGV2ZW50IChpbmhlcml0ZWQgZnJvbSBCYXNlQ3VzdG9tRXZlbnQpXG4gKiBAcHJvcGVydHkge3N0cmluZ30gY29tcG9uZW50IC0gVGhlIGNvbXBvbmVudCB0aGF0IHRyaWdnZXJlZCB0aGUgZXZlbnQgKGluaGVyaXRlZCBmcm9tIEJhc2VDdXN0b21FdmVudClcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZW5naW5lXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGlzdEl0ZW1DdXN0b21FdmVudCBleHRlbmRzIEJhc2VDdXN0b21FdmVudCB7XG4gIGFjdGlvbjogc3RyaW5nO1xuICBwaz86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQmFzZSBpbnRlcmZhY2UgZm9yIGN1c3RvbSBldmVudHNcbiAqIEBzdW1tYXJ5IERlZmluZXMgdGhlIGJhc2Ugc3RydWN0dXJlIGZvciBjdXN0b20gZXZlbnRzIGluIHRoZSBhcHBsaWNhdGlvbi5cbiAqIENvbnRhaW5zIHByb3BlcnRpZXMgZm9yIHRoZSBldmVudCBkYXRhLCB0YXJnZXQgZWxlbWVudCwgbmFtZSwgYW5kIGNvbXBvbmVudC5cbiAqIEBpbnRlcmZhY2UgQmFzZUN1c3RvbUV2ZW50XG4gKiBAcHJvcGVydHkge2FueX0gZGF0YSAtIFRoZSBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUgZXZlbnRcbiAqIEBwcm9wZXJ0eSB7SFRNTEVsZW1lbnR9IFt0YXJnZXRdIC0gVGhlIHRhcmdldCBlbGVtZW50IHRoYXQgdHJpZ2dlcmVkIHRoZSBldmVudFxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtuYW1lXSAtIFRoZSBuYW1lIG9mIHRoZSBldmVudFxuICogQHByb3BlcnR5IHtzdHJpbmd9IGNvbXBvbmVudCAtIFRoZSBjb21wb25lbnQgdGhhdCB0cmlnZ2VyZWQgdGhlIGV2ZW50XG4gKiBAbWVtYmVyT2YgbW9kdWxlOmVuZ2luZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VDdXN0b21FdmVudCB7XG4gIG5hbWU6IHN0cmluZztcbiAgY29tcG9uZW50OiBzdHJpbmc7XG4gIGRhdGE/OiB1bmtub3duO1xuICB0YXJnZXQ/OiBIVE1MRWxlbWVudDtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQ1JVRCBmb3JtIGV2ZW50IHR5cGVcbiAqIEBzdW1tYXJ5IEV4dGVuZHMgQmFzZUN1c3RvbUV2ZW50IHRvIGluY2x1ZGUgb3B0aW9uYWwgaGFuZGxlcnMgZm9yIENSVUQgZm9ybSBvcGVyYXRpb25zLlxuICogVGhpcyBldmVudCB0eXBlIGlzIHVzZWQgZm9yIGZvcm0tcmVsYXRlZCBhY3Rpb25zIGxpa2UgY3JlYXRlLCByZWFkLCB1cGRhdGUsIGFuZCBkZWxldGUgb3BlcmF0aW9ucy5cbiAqIEB0eXBlZGVmIENydWRGb3JtRXZlbnRcbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZywgYW55Pn0gW2hhbmRsZXJzXSAtIE9wdGlvbmFsIGhhbmRsZXJzIGZvciBmb3JtIG9wZXJhdGlvbnNcbiAqIEBtZW1iZXJPZiBtb2R1bGU6ZW5naW5lXG4gKi9cbmV4cG9ydCB0eXBlIENydWRGb3JtRXZlbnQgPSBCYXNlQ3VzdG9tRXZlbnQgJiB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIGhhbmRsZXJzPzogUmVjb3JkPHN0cmluZywgYW55Pjtcbn07XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIENvbXBvbmVudCBpbnB1dCBwcm9wZXJ0aWVzXG4gKiBAc3VtbWFyeSBFeHRlbmRzIEZpZWxkUHJvcGVydGllcyB3aXRoIGFkZGl0aW9uYWwgcHJvcGVydGllcyBzcGVjaWZpYyB0byBBbmd1bGFyIGNvbXBvbmVudHMuXG4gKiBJbmNsdWRlcyB1cGRhdGUgbW9kZSBmb3IgZm9ybSBjb250cm9scyBhbmQgb3B0aW9uYWwgRm9ybUdyb3VwIGFuZCBGb3JtQ29udHJvbCByZWZlcmVuY2VzLlxuICogQGludGVyZmFjZSBDb21wb25lbnRJbnB1dFxuICogQHByb3BlcnR5IHtGaWVsZFVwZGF0ZU1vZGV9IFt1cGRhdGVNb2RlXSAtIFdoZW4gdGhlIGZpZWxkIHZhbHVlIHNob3VsZCBiZSB1cGRhdGVkXG4gKiBAcHJvcGVydHkge0Zvcm1Hcm91cH0gW2Zvcm1Hcm91cF0gLSBPcHRpb25hbCBGb3JtR3JvdXAgcmVmZXJlbmNlXG4gKiBAcHJvcGVydHkge0Zvcm1Db250cm9sfSBbZm9ybUNvbnRyb2xdIC0gT3B0aW9uYWwgRm9ybUNvbnRyb2wgcmVmZXJlbmNlXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmVuZ2luZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudElucHV0IGV4dGVuZHMgRmllbGRQcm9wZXJ0aWVzIHtcbiAgdXBkYXRlTW9kZT86IEZpZWxkVXBkYXRlTW9kZTtcbiAgZm9ybUdyb3VwPzogRm9ybUdyb3VwO1xuICBmb3JtQ29udHJvbD86IEZvcm1Db250cm9sO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBDb21wb25lbnQgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmVcbiAqIEBzdW1tYXJ5IERlZmluZXMgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIGR5bmFtaWNhbGx5IGNyZWF0aW5nIEFuZ3VsYXIgY29tcG9uZW50cy5cbiAqIENvbnRhaW5zIHRoZSBjb21wb25lbnQgbmFtZSwgaW5wdXQgcHJvcGVydGllcywgaW5qZWN0b3IsIGFuZCBvcHRpb25hbCBjaGlsZCBjb21wb25lbnRzLlxuICogQGludGVyZmFjZSBDb21wb25lbnRDb25maWdcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjb21wb25lbnQgLSBUaGUgbmFtZSBvZiB0aGUgY29tcG9uZW50IHRvIHJlbmRlclxuICogQHByb3BlcnR5IHtDb21wb25lbnRJbnB1dH0gaW5wdXRzIC0gVGhlIGlucHV0IHByb3BlcnRpZXMgZm9yIHRoZSBjb21wb25lbnRcbiAqIEBwcm9wZXJ0eSB7RW52aXJvbm1lbnRJbmplY3RvciB8IEluamVjdG9yfSBpbmplY3RvciAtIFRoZSBBbmd1bGFyIGluamVjdG9yIGZvciBkZXBlbmRlbmN5IGluamVjdGlvblxuICogQHByb3BlcnR5IHtDb21wb25lbnRDb25maWdbXX0gW2NoaWxkcmVuXSAtIE9wdGlvbmFsIGNoaWxkIGNvbXBvbmVudCBjb25maWd1cmF0aW9uc1xuICogQG1lbWJlck9mIG1vZHVsZTplbmdpbmVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnRDb25maWcge1xuICBjb21wb25lbnQ6IHN0cmluZztcbiAgaW5wdXRzOiBDb21wb25lbnRJbnB1dDtcbiAgaW5qZWN0b3I6IEVudmlyb25tZW50SW5qZWN0b3IgfCBJbmplY3RvcjtcbiAgY2hpbGRyZW4/OiBDb21wb25lbnRDb25maWdbXTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRm9ybSBwYXJlbnQgZ3JvdXAgdHVwbGVcbiAqIEBzdW1tYXJ5IFJlcHJlc2VudHMgYSB0dXBsZSBjb250YWluaW5nIGEgRm9ybUdyb3VwIGFuZCBpdHMgYXNzb2NpYXRlZCBzdHJpbmcgaWRlbnRpZmllci5cbiAqIFRoaXMgaXMgdXNlZCBmb3IgbWFuYWdpbmcgaGllcmFyY2hpY2FsIGZvcm0gc3RydWN0dXJlcyBhbmQgcGFyZW50LWNoaWxkIHJlbGF0aW9uc2hpcHMuXG4gKiBAdHlwZWRlZiB7W0Zvcm1Hcm91cCwgc3RyaW5nXX0gRm9ybVBhcmVudEdyb3VwXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmVuZ2luZVxuICovXG5leHBvcnQgdHlwZSBGb3JtUGFyZW50R3JvdXAgPSBbRm9ybUdyb3VwLCAgc3RyaW5nXTtcbiJdfQ==
@@ -1182,7 +1182,7 @@ class NgxRenderingEngine extends RenderingEngine {
1182
1182
  * +Record~string, unknown~ globals
1183
1183
  * +EnvironmentInjector injector
1184
1184
  * +ComponentRef~unknown~ component
1185
- * +EventEmitter~ModelRenderCustomEvent~ listenEvent
1185
+ * +EventEmitter~RendererCustomEvent~ listenEvent
1186
1186
  * +ngOnInit()
1187
1187
  * +ngOnDestroy()
1188
1188
  * +ngOnChanges(changes)
@@ -1238,7 +1238,7 @@ class ComponentRendererComponent {
1238
1238
  * dynamic component, creating a communication channel between the parent and the dynamically
1239
1239
  * rendered child.
1240
1240
  *
1241
- * @type {EventEmitter<ModelRenderCustomEvent>}
1241
+ * @type {EventEmitter<RendererCustomEvent>}
1242
1242
  * @memberOf ComponentRendererComponent
1243
1243
  */
1244
1244
  this.listenEvent = new EventEmitter();
@@ -1337,8 +1337,9 @@ class ComponentRendererComponent {
1337
1337
  ?.constructor;
1338
1338
  const metadata = reflectComponentType(component);
1339
1339
  const componentInputs = metadata.inputs;
1340
- const props = globals?.['item'];
1341
- delete props['tag'];
1340
+ const props = globals?.['item'] || globals?.['props'] || {};
1341
+ if (props?.['tag'])
1342
+ delete props['tag'];
1342
1343
  const inputKeys = Object.keys(props);
1343
1344
  const unmappedKeys = [];
1344
1345
  for (const input of inputKeys) {
@@ -1350,8 +1351,6 @@ class ComponentRendererComponent {
1350
1351
  unmappedKeys.push(input);
1351
1352
  }
1352
1353
  }
1353
- if (unmappedKeys.length)
1354
- this.logger.info(`Unmapped input properties for component ${tag}: ${unmappedKeys.join(', ')}`);
1355
1354
  this.vcr.clear();
1356
1355
  this.component = NgxRenderingEngine2$1.createComponent(component, props, metadata, this.vcr, this.injector, []);
1357
1356
  this.subscribeEvents();
@@ -1444,7 +1443,7 @@ class ComponentRendererComponent {
1444
1443
  }
1445
1444
  }
1446
1445
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ComponentRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1447
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ComponentRendererComponent, isStandalone: true, selector: "ngx-decaf-component-renderer", inputs: { tag: "tag", globals: "globals", parent: "parent" }, outputs: { listenEvent: "listenEvent" }, viewQueries: [{ propertyName: "vcr", first: true, predicate: ["componentViewContainer"], descendants: true, read: ViewContainerRef, static: true }, { propertyName: "inner", first: true, predicate: ["inner"], descendants: true, read: TemplateRef, static: true }], ngImport: i0, template: "<ng-template #componentViewContainer></ng-template>\n\n<ng-template #inner>\n @if(parent?.children?.length) {\n @for(child of parent.children; track child) {\n @if(!child.children?.length) {\n <ng-container\n *ngComponentOutlet=\"\n child.component;\n injector: child.injector;\n inputs: child.inputs;\n content:child.content;\n \"\n />\n } @else {\n <ngx-decaf-component-renderer [parent]=\"child\"> </ngx-decaf-component-renderer>\n }\n }\n }\n</ng-template>\n\n\n", styles: [""], dependencies: [{ kind: "component", type: ComponentRendererComponent, selector: "ngx-decaf-component-renderer", inputs: ["tag", "globals", "parent"], outputs: ["listenEvent"] }, { kind: "ngmodule", type: ForAngularModule }, { kind: "directive", type: i1.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }] }); }
1446
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ComponentRendererComponent, isStandalone: true, selector: "ngx-decaf-component-renderer", inputs: { tag: "tag", globals: "globals", model: "model", parent: "parent" }, outputs: { listenEvent: "listenEvent" }, viewQueries: [{ propertyName: "vcr", first: true, predicate: ["componentViewContainer"], descendants: true, read: ViewContainerRef, static: true }, { propertyName: "inner", first: true, predicate: ["inner"], descendants: true, read: TemplateRef, static: true }], ngImport: i0, template: "<ng-template #componentViewContainer></ng-template>\n\n<ng-template #inner>\n @if(parent?.children?.length) {\n @for(child of parent.children; track child) {\n @if(!child.children?.length) {\n <ng-container\n *ngComponentOutlet=\"\n child.component;\n injector: child.injector;\n inputs: child.inputs;\n content:child.content;\n \"\n />\n } @else {\n <ngx-decaf-component-renderer [parent]=\"child\"> </ngx-decaf-component-renderer>\n }\n }\n }\n</ng-template>\n\n\n", styles: [""], dependencies: [{ kind: "component", type: ComponentRendererComponent, selector: "ngx-decaf-component-renderer", inputs: ["tag", "globals", "model", "parent"], outputs: ["listenEvent"] }, { kind: "ngmodule", type: ForAngularModule }, { kind: "directive", type: i1.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }] }); }
1448
1447
  }
1449
1448
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ComponentRendererComponent, decorators: [{
1450
1449
  type: Component,
@@ -1459,6 +1458,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
1459
1458
  type: Input
1460
1459
  }], listenEvent: [{
1461
1460
  type: Output
1461
+ }], model: [{
1462
+ type: Input
1462
1463
  }], parent: [{
1463
1464
  type: Input
1464
1465
  }], inner: [{
@@ -1515,7 +1516,7 @@ class ModelRendererComponent {
1515
1516
  refresh(model) {
1516
1517
  model =
1517
1518
  typeof model === 'string'
1518
- ? Model.build({}, JSON.parse(model))
1519
+ ? Model.build({}, model)
1519
1520
  : model;
1520
1521
  this.output = model.render(this.globals || {}, this.vcr, this.injector, this.inner);
1521
1522
  if (this.output?.inputs)
@@ -1574,7 +1575,7 @@ class ModelRendererComponent {
1574
1575
  }
1575
1576
  }
1576
1577
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ModelRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1577
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ModelRendererComponent, isStandalone: true, selector: "ngx-decaf-model-renderer", inputs: { model: "model", globals: "globals", rendererId: "rendererId" }, outputs: { listenEvent: "listenEvent" }, viewQueries: [{ propertyName: "inner", first: true, predicate: ["inner"], descendants: true, read: TemplateRef, static: true }, { propertyName: "vcr", first: true, predicate: ["componentOuter"], descendants: true, read: ViewContainerRef, static: true }], usesOnChanges: true, ngImport: i0, template: " <ng-template #componentOuter></ng-template>\n <ng-template #inner>\n <div [id]=\"rendererId || null\">\n @for (child of output?.children; track child) {\n @if(child?.children?.length) {\n <ngx-decaf-component-renderer [parent]=\"child\" />\n } @else {\n <ng-container\n #childComponents\n *ngComponentOutlet=\"\n child.component;\n injector: child.injector;\n inputs: child.inputs;\n content:child.content;\n \"\n />\n }\n }\n </div>\n </ng-template>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: ForAngularModule }, { kind: "directive", type: i1.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "component", type: ComponentRendererComponent, selector: "ngx-decaf-component-renderer", inputs: ["tag", "globals", "parent"], outputs: ["listenEvent"] }] }); }
1578
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ModelRendererComponent, isStandalone: true, selector: "ngx-decaf-model-renderer", inputs: { model: "model", globals: "globals", rendererId: "rendererId" }, outputs: { listenEvent: "listenEvent" }, viewQueries: [{ propertyName: "inner", first: true, predicate: ["inner"], descendants: true, read: TemplateRef, static: true }, { propertyName: "vcr", first: true, predicate: ["componentOuter"], descendants: true, read: ViewContainerRef, static: true }], usesOnChanges: true, ngImport: i0, template: " <ng-template #componentOuter></ng-template>\n <ng-template #inner>\n <div [id]=\"rendererId || null\">\n @for (child of output?.children; track child) {\n @if(child?.children?.length) {\n <ngx-decaf-component-renderer [parent]=\"child\" />\n } @else {\n <ng-container\n #childComponents\n *ngComponentOutlet=\"\n child.component;\n injector: child.injector;\n inputs: child.inputs;\n content:child.content;\n \"\n />\n }\n }\n </div>\n </ng-template>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: ForAngularModule }, { kind: "directive", type: i1.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "component", type: ComponentRendererComponent, selector: "ngx-decaf-component-renderer", inputs: ["tag", "globals", "model", "parent"], outputs: ["listenEvent"] }] }); }
1578
1579
  }
1579
1580
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ModelRendererComponent, decorators: [{
1580
1581
  type: Component,
@@ -2076,7 +2077,7 @@ let CrudFormComponent = class CrudFormComponent {
2076
2077
  const data = NgxFormService.getFormData(this.formGroup);
2077
2078
  this.submitEvent.emit({
2078
2079
  data,
2079
- component: 'FormReactiveComponent',
2080
+ component: 'CrudFormComponent',
2080
2081
  name: this.action || EventConstants.SUBMIT_EVENT,
2081
2082
  handlers: this.handlers,
2082
2083
  });
@@ -2091,7 +2092,7 @@ let CrudFormComponent = class CrudFormComponent {
2091
2092
  handleDelete() {
2092
2093
  this.submitEvent.emit({
2093
2094
  data: this.uid,
2094
- component: 'FormReactiveComponent',
2095
+ component: 'CrudFormComponent',
2095
2096
  name: EventConstants.SUBMIT_EVENT,
2096
2097
  });
2097
2098
  }