UNPKG

turbo-gulp

Version:

Gulp tasks to boost high-quality projects.

400 lines (399 loc) 52.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.DEFAULT_UNTYPED_TSLINT_RULES = { // Enforces function overloads to be consecutive. "adjacent-overload-signatures": true, // Enforces vertical alignment "align": false, // Requires using either ‘T[]’ or ‘Array' for arrays "array-type": [true, "array"], // Requires parentheses around the parameters of arrow function definitions "arrow-parens": [ true, // Arrow functions with one parameter must not have parentheses if removing them is allowed by TypeScript. "ban-single-arg-parens", ], // Suggests to convert `() => { return x; }` to `() => x`. "arrow-return-shorthand": true, // Bans the use of specific functions or global methods "ban": [ true, ], // Bans specific types from being used. "ban-types": false, // In a binary expression, a literal should always be on the right-hand side if possible. "binary-expression-operand-order": false, // An interface or literal type with just a call signature can be written as a function type. "callable-types": true, // Enforces PascalCased class and interface names "class-name": true, // Enforces formatting rules for single-line comments "comment-format": [ true, // Requires that all single-line comments must begin with a space, as in `// comment` "check-space", ], // Enforces a threshold of cyclomatic complexity "cyclomatic-complexity": [true, 30], // Enforces braces for `if`/`for`/`do`/`while` statements "curly": true, // Ensures the file ends with a newline "eofline": true, // Enforces UTF-8 file encoding. "encoding": true, // Enforces a certain header comment for all files, matched by a regular expression "file-header": false, // Requires a `for ... in` statement to be filtered with an `if` statement "forin": false, // Disallows importing the specified modules directly via `import` and `require`. "import-blacklist": false, // Ensures proper spacing between import statement keywords. "import-spacing": true, // Enforces indentation with tabs or spaces "indent": [true, "spaces"], // Requires interface names to begin with a capital ‘I’ "interface-name": [ true, // requires interface names to not have an “I” prefix "never-prefix", ], // Prefer an interface declaration over a type literal (`type T = { ... }`) "interface-over-type-literal": true, // Enforces basic format rules for JSDoc comments "jsdoc-format": true, // Only allows labels in sensible locations "label-position": true, // Enforces a consistent linebreak style "linebreak-style": [true, "LF"], // A file may not contain more than the specified number of classes "max-classes-per-file": [true, 5], // Requires files to remain under a certain number of lines "max-file-line-count": [true, 800], // Requires lines to be under a certain max length "max-line-length": [true, 120], // Requires explicit visibility declarations for class members "member-access": false, // Enforces member ordering "member-ordering": [ true, { order: "fields-first", }, ], // Enforces blank line before return when not the only line in the block. "newline-before-return": false, // Requires parentheses when invoking a constructor via the `new` keyword. "new-parens": false, // Requires the use of `as Type` for type assertions instead of `<Type>`. "no-angle-bracket-type-assertion": false, // Diallows usages of `any` as a type declaration. "no-any": false, // Disallows access to arguments.callee. "no-arg": true, // Disallows bitwise operators. "no-bitwise": false, // Disallows any type of assignment in conditionals. "no-conditional-assignment": true, // Disallows one or more blank lines in a row. "no-consecutive-blank-lines": [true, 1], // Bans the use of specified console methods. "no-console": false, // Disallows access to the constructors of `String`, `Number`, and `Boolean`. "no-construct": true, // Disallows `debugger` statements. "no-debugger": true, // Disallows default exports in ES6-style modules. "no-default-export": true, // Disallows multiple import statements from the same module. "no-duplicate-imports": false, // Warns if `super()` appears twice in a constructor. "no-duplicate-super": true, // Prevents duplicate cases in switch statements. "no-duplicate-switch-case": true, // Disallows duplicate variable declarations in the same block scope. "no-duplicate-variable": true, // Disallows empty blocks. "no-empty": false, // Forbids empty interfaces. "no-empty-interface": false, // Disallows `eval` function invocations. "no-eval": true, // Disallows importing modules that are not listed as dependency in the project’s package.json "no-implicit-dependencies": [true, "dev", "optional"], // Avoid import statements with side-effect. "no-import-side-effect": false, // Disallows explicit type declarations for variables or parameters initialized to a number, // string, or boolean. "no-inferrable-types": false, // Disallows internal `module`. "no-internal-module": true, // Warns on use of `${` in non-template strings. "no-invalid-template-strings": true, // Disallows using the `this` keyword outside of classes. "no-invalid-this": false, // Disallows irregular whitespace outside of strings and comments "no-irregular-whitespace": true, // Disallows the use constant number values outside of variable assignments. "no-magic-numbers": false, // Disallows mergeable namespaces in the same file. "no-mergeable-namespace": false, // Disallows use of internal `module`s and `namespace`s. "no-namespace": false, // Warns on apparent attempts to define constructors for interfaces or `new` for classes. "no-misused-new": true, // Disallows non-null assertions. "no-non-null-assertion": false, // Disallows use of the `null` keyword literal. "no-null-keyword": false, // Forbids an object literal to appear in a type assertion expression. Casting to `any` is still allowed. "no-object-literal-type-assertion": false, // Disallows parameter properties in class constructors. "no-parameter-properties": true, // Disallows reassigning parameters. "no-parameter-reassignment": false, // Disallows `/// <reference path=>` imports (use ES6-style imports instead). "no-reference": true, // Disallows invocation of `require()`. "no-require-imports": true, // Disallows unnecessary `return await`. "no-return-await": true, // Disallows shadowing variable declarations. "no-shadowed-variable": false, // Forbids array literals to contain missing elements. "no-sparse-arrays": true, // Disallows object access via string literals. "no-string-literal": false, // Flags throwing plain strings or concatenations of strings. "no-string-throw": true, // Disallows importing any submodule. "no-submodule-imports": false, // Disallows falling through case statements. "no-switch-case-fall-through": true, // Disallows unnecessary references to `this`. "no-this-assignment": [true, { "allow-destructuring": true }], // Disallows trailing whitespace at the end of a line. "no-trailing-whitespace": true, // Replaces `x => f(x)` with just `f`. "no-unnecessary-callback-wrapper": true, // Forbids a ‘var’/’let’ statement or destructuring initializer to be initialized to ‘undefined’. "no-unnecessary-initializer": false, // Disallows control flow statements, such as return, continue, break and throws in finally // blocks. "no-unsafe-finally": true, // Disallows unused expression statements. "no-unused-expression": true, // Disallows usage of the `var` keyword. "no-var-keyword": true, // Disallows the use of require statements except in import statements. "no-var-requires": true, // Checks that decimal literals should begin with `0.` instead of just `.`, and should not end with a trailing `0`. // TODO: Enable it when the option to enforce lowercase hex is available "number-literal-format": false, // Enforces consistent object literal property quote style. "object-literal-key-quotes": [true, "consistent-as-needed"], // Enforces use of ES6 object literal shorthand when possible. "object-literal-shorthand": true, // Requires keys in object literals to be sorted alphabetically. "object-literal-sort-keys": false, // Requires the specified tokens to be on the same line as the expression preceding them. "one-line": [ true, // Checks that `catch` is on the same line as the closing brace for `try`. "check-catch", // Checks that `finally` is on the same line as the closing brace for `catch`. "check-finally", // Checks that `else` is on the same line as the closing brace for `if`. "check-else", // Checks that an open brace falls on the same line as its preceding expression. "check-open-brace", // Checks preceding whitespace for the specified tokens. "check-whitespace", ], // Disallows multiple variable definitions in the same declaration statement. "one-variable-per-declaration": [true, "ignore-for-loop"], // Disallows traditional (non-arrow) function expressions. "only-arrow-functions": false, // Requires that import statements be alphabetized. "ordered-imports": true, // Recommends to use a conditional expression instead of assigning to the same thing in each branch of an if // statement. "prefer-conditional-expression": false, // Requires that variable declarations use const instead of let if possible. "prefer-const": true, // Recommends a ‘for-of’ loop over a standard ‘for’ loop if the index is only used to access // the array being iterated. "prefer-for-of": true, // Warns for class methods that do not use `this`. "prefer-function-over-method": false, // Prefer `foo(): void` over `foo: () => void` in interfaces and types. "prefer-method-signature": true, // Enforces the use of the ES2015 object spread operator over `Object.assign()` where appropriate. "prefer-object-spread": true, // Prefer a `switch` statement to an `if` statement with simple `===` comparisons. "prefer-switch": true, // Prefer a template expression over string literal concatenation. "prefer-template": [true, "allow-single-concat"], // Requires single or double quotes for string literals. "quotemark": [ true, // Enforces double quotes. "double", // Forbids single-line untagged template strings that do not contain string interpolations. "avoid-template", // Allows you to use the “other” quotemark in cases where escaping would normally be required. "avoid-escape", ], // Requires the radix parameter to be specified when calling `parseInt`. "radix": true, // Enforces consistent semicolon usage at the end of every statement. "semicolon": [true, "always"], // Require or disallow a space before function parenthesis "space-before-function-paren": [ true, { anonymous: "always", named: "never", asyncArrow: "always", method: "never", constructor: "never", }, ], // Enforces spaces within parentheses or disallow them. "space-within-parens": [true, 0], // Requires a `default` case in all `switch` statements. "switch-default": true, // Checks whether the final clause of a switch statement ends in `break;`. "switch-final-break": [true, "always"], // Requires or disallows trailing commas in array and object literals, destructuring // assignments, function and tuple typings, named imports and function parameters. "trailing-comma": [ true, { // Checks multi-line object literals. multiline: "always", // Checks single-line object literals. singleline: "never", }, ], // Requires `===` and `!==` in place of `==` and `!=`. "triple-equals": true, // Checks that type literal members are separated by semicolons. Enforces a trailing semicolon for multiline type // literals. "type-literal-delimiter": true, // Requires type definitions to exist. "typedef": [ true, // Check return types of interface properties. "property-declaration", // Check variable declarations. "variable-declaration", // Check member variable declarations. "member-variable-declaration", ], // Requires or disallows whitespace for type definitions. "typedef-whitespace": [ true, // Specifies how much space should be to the _left_ of a typedef colon. { "call-signature": "nospace", "index-signature": "nospace", "parameter": "nospace", "property-declaration": "nospace", "variable-declaration": "nospace", }, // Specifies how much space should be to the _right_ of a typedef colon. { "call-signature": "onespace", "index-signature": "onespace", "parameter": "onespace", "property-declaration": "onespace", "variable-declaration": "onespace", }, ], // Makes sure result of `typeof` is compared to correct string values. "typeof-compare": true, // Warns for any two overloads that could be unified into one by using a union or an optional/rest parameter. "unified-signatures": true, // Enforces use of the `isNaN()` function to check for NaN references instead of a comparison // to the `NaN` constant. "use-isnan": true, // Checks variable names for various errors. "variable-name": [true, "check-format", "allow-leading-underscore"], // Enforces whitespace style conventions. "whitespace": [ true, // Checks branching statements (`if`/`else`/f`or`/`while`) are followed by whitespace. "check-branch", // Checks that variable declarations have whitespace around the equals token. "check-decl", // Checks for whitespace around operator tokens. "check-operator", // Checks for whitespace in import & export statements. "check-module", // Checks for whitespace after separator tokens (`,`/`;`). "check-separator", // Checks that there is no whitespace after rest/spread operator (`...`). "check-rest-spread", // Checks for whitespace before a variable type specification. "check-type", // Checks for whitespace between a typecast and its target. "check-typecast", // Checks for whitespace between type operators `|` and `&`. "check-type-operator", // Checks for whitespace before the opening brace of a block. "check-preblock", ], }; exports.DEFAULT_TYPED_TSLINT_RULES = Object.assign({}, exports.DEFAULT_UNTYPED_TSLINT_RULES, { // Warns for an awaited value that is not a Promise. "await-promise": true, // Enforces documentation for important items be filled out. "completed-docs": [true, ["classes", "functions"]], // Warns when deprecated APIs are used. "deprecation": true, // Requires that a default import have the same name as the declaration it imports. Does nothing for anonymous // default exports. "match-default-export-name": false, // Warns on comparison to a boolean literal, as in `x === true`. "no-boolean-literal-compare": true, // Promises returned by functions must be handled appropriately. "no-floating-promises": true, // Disallows iterating over an array with a for-in loop. "no-for-in-array": true, // Disallow type inference of `{}` (empty object type) at function and constructor call sites. "no-inferred-empty-object-type": false, // Warns when a method is used as outside of a method call. "no-unbound-method": false, // Warns when using an expression of type `any` in a dynamic way. "no-unsafe-any": false, // Warns when a namespace qualifier (`A.x`) is unnecessary. "no-unnecessary-qualifier": true, // Warns if a type assertion does not change the type of an expression. "no-unnecessary-type-assertion": false, // Disallows unused imports, variables, functions and private class members. "no-unused-variable": false, // Disallows usage of variables before their declaration. "no-use-before-declare": true, // Requires expressions of type void to appear in statement position. "no-void-expression": true, // Requires any function or method that returns a promise to be marked async. "promise-function-async": true, // When adding two variables, operands must both be of type number or of type string. "restrict-plus-operands": true, // Prefer `return;` in void functions and `return undefined;` in value-returning functions. "return-undefined": true, // Usage of && or || operators should be with boolean operands and expressions in If, Do, While and For statements // should be of type boolean. "strict-boolean-expressions": true, // Warns for type predicates that are always true or always false. "strict-type-predicates": false, // Warns if an explicitly specified type argument is the default for that type parameter. "use-default-type-parameter": false }); exports.DEFAULT_UNTYPED_TSLINT_CONFIG = { rules: exports.DEFAULT_UNTYPED_TSLINT_RULES, }; // TODO: Support type checking exports.DEFAULT_TYPED_TSLINT_CONFIG = { rules: exports.DEFAULT_TYPED_TSLINT_RULES, }; //# sourceMappingURL=data:application/json;charset=utf8;base64,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QzNELDBCQUEwQixFQUFFLElBQUk7SUFDaEMsdUVBQXVFO0lBQ3ZFLCtCQUErQixFQUFFLEtBQUs7SUFDdEMsNEVBQTRFO0lBQzVFLG9CQUFvQixFQUFFLEtBQUs7SUFDM0IseURBQXlEO0lBQ3pELHVCQUF1QixFQUFFLElBQUk7SUFDN0IscUVBQXFFO0lBQ3JFLG9CQUFvQixFQUFFLElBQUk7SUFDMUIsNkVBQTZFO0lBQzdFLHdCQUF3QixFQUFFLElBQUk7SUFDOUIscUZBQXFGO0lBQ3JGLHdCQUF3QixFQUFFLElBQUk7SUFDOUIsMkZBQTJGO0lBQzNGLGtCQUFrQixFQUFFLElBQUk7SUFDeEIsa0hBQWtIO0lBQ2xILDZCQUE2QjtJQUM3Qiw0QkFBNEIsRUFBRSxJQUFJO0lBQ2xDLGtFQUFrRTtJQUNsRSx3QkFBd0IsRUFBRSxLQUFLO0lBQy9CLHlGQUF5RjtJQUN6Riw0QkFBNEIsRUFBRSxLQUFLLElBQ25DO0FBRVcsUUFBQSw2QkFBNkIsR0FBc0M7SUFDOUUsS0FBSyxFQUFFLG9DQUE0QjtDQUNwQyxDQUFDO0FBRUYsOEJBQThCO0FBQ2pCLFFBQUEsMkJBQTJCLEdBQXNDO0lBQzVFLEtBQUssRUFBRSxrQ0FBMEI7Q0FDbEMsQ0FBQyIsImZpbGUiOiJvcHRpb25zL3RzbGludC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29uZmlndXJhdGlvbiBhcyBUc2xpbnRDb25maWd1cmF0aW9uIH0gZnJvbSBcInRzbGludFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRzbGludE9wdGlvbnMge1xuICAvKipcbiAgICogUGF0aCB0byB0aGUgb3V0cHV0IHRzbGludC5qc29uIGZpbGUsIHJlbGF0aXZlIHRvIGByb290YFxuICAgKi9cbiAgdHNsaW50SnNvbj86IHN0cmluZztcblxuICAvKipcbiAgICogRXh0ZW5kIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb25cbiAgICogVGhpcyBjYW4gZWl0aGVyIGJlIHBhdGggcmVsYXRpdmUgdG8gYHJvb3RgIG9yIGEgcmF3IGNvbmZpZyBvYmplY3QuXG4gICAqIElmIHlvdSBwYXNzIGEgcmF3IGNvbmZpZyBvYmplY3QsIGl0cyBjb25maWdGaWxlRGlyIHdpbGwgYmUgYHJvb3RgLlxuICAgKi9cbiAgY29uZmlndXJhdGlvbj86IFRzbGludENvbmZpZ3VyYXRpb24uUmF3Q29uZmlnRmlsZSB8IHN0cmluZztcblxuICBmb3JtYXR0ZXI/OiBcIm1zYnVpbGRcIiB8IFwidmVyYm9zZVwiIHwgc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZmlsZXMgdG8gbGludCwgcmVsYXRpdmUgdG8gYHJvb3RgXG4gICAqL1xuICBmaWxlcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBJbnN0YW5jZSBvZiB0c2xpbnQgdG8gdXNlXG4gICAqL1xuICB0c2xpbnQ/OiBhbnk7XG59XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1VOVFlQRURfVFNMSU5UX1JVTEVTOiBUc2xpbnRDb25maWd1cmF0aW9uLlJhd1J1bGVzQ29uZmlnID0ge1xuICAvLyBFbmZvcmNlcyBmdW5jdGlvbiBvdmVybG9hZHMgdG8gYmUgY29uc2VjdXRpdmUuXG4gIFwiYWRqYWNlbnQtb3ZlcmxvYWQtc2lnbmF0dXJlc1wiOiB0cnVlLFxuICAvLyBFbmZvcmNlcyB2ZXJ0aWNhbCBhbGlnbm1lbnRcbiAgXCJhbGlnblwiOiBmYWxzZSxcbiAgLy8gUmVxdWlyZXMgdXNpbmcgZWl0aGVyIOKAmFRbXeKAmSBvciDigJhBcnJheScgZm9yIGFycmF5c1xuICBcImFycmF5LXR5cGVcIjogW3RydWUsIFwiYXJyYXlcIl0sXG4gIC8vIFJlcXVpcmVzIHBhcmVudGhlc2VzIGFyb3VuZCB0aGUgcGFyYW1ldGVycyBvZiBhcnJvdyBmdW5jdGlvbiBkZWZpbml0aW9uc1xuICBcImFycm93LXBhcmVuc1wiOiBbXG4gICAgdHJ1ZSxcbiAgICAvLyBBcnJvdyBmdW5jdGlvbnMgd2l0aCBvbmUgcGFyYW1ldGVyIG11c3Qgbm90IGhhdmUgcGFyZW50aGVzZXMgaWYgcmVtb3ZpbmcgdGhlbSBpcyBhbGxvd2VkIGJ5IFR5cGVTY3JpcHQuXG4gICAgXCJiYW4tc2luZ2xlLWFyZy1wYXJlbnNcIixcbiAgXSxcbiAgLy8gU3VnZ2VzdHMgdG8gY29udmVydCBgKCkgPT4geyByZXR1cm4geDsgfWAgdG8gYCgpID0+IHhgLlxuICBcImFycm93LXJldHVybi1zaG9ydGhhbmRcIjogdHJ1ZSxcbiAgLy8gQmFucyB0aGUgdXNlIG9mIHNwZWNpZmljIGZ1bmN0aW9ucyBvciBnbG9iYWwgbWV0aG9kc1xuICBcImJhblwiOiBbXG4gICAgdHJ1ZSxcbiAgXSxcbiAgLy8gQmFucyBzcGVjaWZpYyB0eXBlcyBmcm9tIGJlaW5nIHVzZWQuXG4gIFwiYmFuLXR5cGVzXCI6IGZhbHNlLFxuICAvLyBJbiBhIGJpbmFyeSBleHByZXNzaW9uLCBhIGxpdGVyYWwgc2hvdWxkIGFsd2F5cyBiZSBvbiB0aGUgcmlnaHQtaGFuZCBzaWRlIGlmIHBvc3NpYmxlLlxuICBcImJpbmFyeS1leHByZXNzaW9uLW9wZXJhbmQtb3JkZXJcIjogZmFsc2UsXG4gIC8vIEFuIGludGVyZmFjZSBvciBsaXRlcmFsIHR5cGUgd2l0aCBqdXN0IGEgY2FsbCBzaWduYXR1cmUgY2FuIGJlIHdyaXR0ZW4gYXMgYSBmdW5jdGlvbiB0eXBlLlxuICBcImNhbGxhYmxlLXR5cGVzXCI6IHRydWUsXG4gIC8vIEVuZm9yY2VzIFBhc2NhbENhc2VkIGNsYXNzIGFuZCBpbnRlcmZhY2UgbmFtZXNcbiAgXCJjbGFzcy1uYW1lXCI6IHRydWUsXG4gIC8vIEVuZm9yY2VzIGZvcm1hdHRpbmcgcnVsZXMgZm9yIHNpbmdsZS1saW5lIGNvbW1lbnRzXG4gIFwiY29tbWVudC1mb3JtYXRcIjogW1xuICAgIHRydWUsXG4gICAgLy8gUmVxdWlyZXMgdGhhdCBhbGwgc2luZ2xlLWxpbmUgY29tbWVudHMgbXVzdCBiZWdpbiB3aXRoIGEgc3BhY2UsIGFzIGluIGAvLyBjb21tZW50YFxuICAgIFwiY2hlY2stc3BhY2VcIixcbiAgICAvLyBSZXF1aXJlcyB0aGF0IHRoZSBmaXJzdCBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIgb2YgYSBjb21tZW50IG11c3QgYmUgdXBwZXJjYXNlLCBpZiBhcHBsaWNhYmxlLlxuICAgIC8vIFwiY2hlY2stdXBwZXJjYXNlXCIsXG4gIF0sXG4gIC8vIEVuZm9yY2VzIGEgdGhyZXNob2xkIG9mIGN5Y2xvbWF0aWMgY29tcGxleGl0eVxuICBcImN5Y2xvbWF0aWMtY29tcGxleGl0eVwiOiBbdHJ1ZSwgMzBdLFxuICAvLyBFbmZvcmNlcyBicmFjZXMgZm9yIGBpZmAvYGZvcmAvYGRvYC9gd2hpbGVgIHN0YXRlbWVudHNcbiAgXCJjdXJseVwiOiB0cnVlLFxuICAvLyBFbnN1cmVzIHRoZSBmaWxlIGVuZHMgd2l0aCBhIG5ld2xpbmVcbiAgXCJlb2ZsaW5lXCI6IHRydWUsXG4gIC8vIEVuZm9yY2VzIFVURi04IGZpbGUgZW5jb2RpbmcuXG4gIFwiZW5jb2RpbmdcIjogdHJ1ZSxcbiAgLy8gRW5mb3JjZXMgYSBjZXJ0YWluIGhlYWRlciBjb21tZW50IGZvciBhbGwgZmlsZXMsIG1hdGNoZWQgYnkgYSByZWd1bGFyIGV4cHJlc3Npb25cbiAgXCJmaWxlLWhlYWRlclwiOiBmYWxzZSxcbiAgLy8gUmVxdWlyZXMgYSBgZm9yIC4uLiBpbmAgc3RhdGVtZW50IHRvIGJlIGZpbHRlcmVkIHdpdGggYW4gYGlmYCBzdGF0ZW1lbnRcbiAgXCJmb3JpblwiOiBmYWxzZSxcbiAgLy8gRGlzYWxsb3dzIGltcG9ydGluZyB0aGUgc3BlY2lmaWVkIG1vZHVsZXMgZGlyZWN0bHkgdmlhIGBpbXBvcnRgIGFuZCBgcmVxdWlyZWAuXG4gIFwiaW1wb3J0LWJsYWNrbGlzdFwiOiBmYWxzZSxcbiAgLy8gRW5zdXJlcyBwcm9wZXIgc3BhY2luZyBiZXR3ZWVuIGltcG9ydCBzdGF0ZW1lbnQga2V5d29yZHMuXG4gIFwiaW1wb3J0LXNwYWNpbmdcIjogdHJ1ZSxcbiAgLy8gRW5mb3JjZXMgaW5kZW50YXRpb24gd2l0aCB0YWJzIG9yIHNwYWNlc1xuICBcImluZGVudFwiOiBbdHJ1ZSwgXCJzcGFjZXNcIl0sXG4gIC8vIFJlcXVpcmVzIGludGVyZmFjZSBuYW1lcyB0byBiZWdpbiB3aXRoIGEgY2FwaXRhbCDigJhJ4oCZXG4gIFwiaW50ZXJmYWNlLW5hbWVcIjogW1xuICAgIHRydWUsXG4gICAgLy8gcmVxdWlyZXMgaW50ZXJmYWNlIG5hbWVzIHRvIG5vdCBoYXZlIGFuIOKAnEnigJ0gcHJlZml4XG4gICAgXCJuZXZlci1wcmVmaXhcIixcbiAgXSxcbiAgLy8gUHJlZmVyIGFuIGludGVyZmFjZSBkZWNsYXJhdGlvbiBvdmVyIGEgdHlwZSBsaXRlcmFsIChgdHlwZSBUID0geyAuLi4gfWApXG4gIFwiaW50ZXJmYWNlLW92ZXItdHlwZS1saXRlcmFsXCI6IHRydWUsXG4gIC8vIEVuZm9yY2VzIGJhc2ljIGZvcm1hdCBydWxlcyBmb3IgSlNEb2MgY29tbWVudHNcbiAgXCJqc2RvYy1mb3JtYXRcIjogdHJ1ZSxcbiAgLy8gT25seSBhbGxvd3MgbGFiZWxzIGluIHNlbnNpYmxlIGxvY2F0aW9uc1xuICBcImxhYmVsLXBvc2l0aW9uXCI6IHRydWUsXG4gIC8vIEVuZm9yY2VzIGEgY29uc2lzdGVudCBsaW5lYnJlYWsgc3R5bGVcbiAgXCJsaW5lYnJlYWstc3R5bGVcIjogW3RydWUsIFwiTEZcIl0sXG4gIC8vIEEgZmlsZSBtYXkgbm90IGNvbnRhaW4gbW9yZSB0aGFuIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGNsYXNzZXNcbiAgXCJtYXgtY2xhc3Nlcy1wZXItZmlsZVwiOiBbdHJ1ZSwgNV0sXG4gIC8vIFJlcXVpcmVzIGZpbGVzIHRvIHJlbWFpbiB1bmRlciBhIGNlcnRhaW4gbnVtYmVyIG9mIGxpbmVzXG4gIFwibWF4LWZpbGUtbGluZS1jb3VudFwiOiBbdHJ1ZSwgODAwXSxcbiAgLy8gUmVxdWlyZXMgbGluZXMgdG8gYmUgdW5kZXIgYSBjZXJ0YWluIG1heCBsZW5ndGhcbiAgXCJtYXgtbGluZS1sZW5ndGhcIjogW3RydWUsIDEyMF0sXG4gIC8vIFJlcXVpcmVzIGV4cGxpY2l0IHZpc2liaWxpdHkgZGVjbGFyYXRpb25zIGZvciBjbGFzcyBtZW1iZXJzXG4gIFwibWVtYmVyLWFjY2Vzc1wiOiBmYWxzZSxcbiAgLy8gRW5mb3JjZXMgbWVtYmVyIG9yZGVyaW5nXG4gIFwibWVtYmVyLW9yZGVyaW5nXCI6IFtcbiAgICB0cnVlLFxuICAgIHtcbiAgICAgIG9yZGVyOiBcImZpZWxkcy1maXJzdFwiLFxuICAgIH0sXG4gIF0sXG4gIC8vIEVuZm9yY2VzIGJsYW5rIGxpbmUgYmVmb3JlIHJldHVybiB3aGVuIG5vdCB0aGUgb25seSBsaW5lIGluIHRoZSBibG9jay5cbiAgXCJuZXdsaW5lLWJlZm9yZS1yZXR1cm5cIjogZmFsc2UsXG4gIC8vIFJlcXVpcmVzIHBhcmVudGhlc2VzIHdoZW4gaW52b2tpbmcgYSBjb25zdHJ1Y3RvciB2aWEgdGhlIGBuZXdgIGtleXdvcmQuXG4gIFwibmV3LXBhcmVuc1wiOiBmYWxzZSxcbiAgLy8gUmVxdWlyZXMgdGhlIHVzZSBvZiBgYXMgVHlwZWAgZm9yIHR5cGUgYXNzZXJ0aW9ucyBpbnN0ZWFkIG9mIGA8VHlwZT5gLlxuICBcIm5vLWFuZ2xlLWJyYWNrZXQtdHlwZS1hc3NlcnRpb25cIjogZmFsc2UsXG4gIC8vIERpYWxsb3dzIHVzYWdlcyBvZiBgYW55YCBhcyBhIHR5cGUgZGVjbGFyYXRpb24uXG4gIFwibm8tYW55XCI6IGZhbHNlLFxuICAvLyBEaXNhbGxvd3MgYWNjZXNzIHRvIGFyZ3VtZW50cy5jYWxsZWUuXG4gIFwibm8tYXJnXCI6IHRydWUsXG4gIC8vIERpc2FsbG93cyBiaXR3aXNlIG9wZXJhdG9ycy5cbiAgXCJuby1iaXR3aXNlXCI6IGZhbHNlLFxuICAvLyBEaXNhbGxvd3MgYW55IHR5cGUgb2YgYXNzaWdubWVudCBpbiBjb25kaXRpb25hbHMuXG4gIFwibm8tY29uZGl0aW9uYWwtYXNzaWdubWVudFwiOiB0cnVlLFxuICAvLyBEaXNhbGxvd3Mgb25lIG9yIG1vcmUgYmxhbmsgbGluZXMgaW4gYSByb3cuXG4gIFwibm8tY29uc2VjdXRpdmUtYmxhbmstbGluZXNcIjogW3RydWUsIDFdLFxuICAvLyBCYW5zIHRoZSB1c2Ugb2Ygc3BlY2lmaWVkIGNvbnNvbGUgbWV0aG9kcy5cbiAgXCJuby1jb25zb2xlXCI6IGZhbHNlLFxuICAvLyBEaXNhbGxvd3MgYWNjZXNzIHRvIHRoZSBjb25zdHJ1Y3RvcnMgb2YgYFN0cmluZ2AsIGBOdW1iZXJgLCBhbmQgYEJvb2xlYW5gLlxuICBcIm5vLWNvbnN0cnVjdFwiOiB0cnVlLFxuICAvLyBEaXNhbGxvd3MgYGRlYnVnZ2VyYCBzdGF0ZW1lbnRzLlxuICBcIm5vLWRlYnVnZ2VyXCI6IHRydWUsXG4gIC8vIERpc2FsbG93cyBkZWZhdWx0IGV4cG9ydHMgaW4gRVM2LXN0eWxlIG1vZHVsZXMuXG4gIFwibm8tZGVmYXVsdC1leHBvcnRcIjogdHJ1ZSxcbiAgLy8gRGlzYWxsb3dzIG11bHRpcGxlIGltcG9ydCBzdGF0ZW1lbnRzIGZyb20gdGhlIHNhbWUgbW9kdWxlLlxuICBcIm5vLWR1cGxpY2F0ZS1pbXBvcnRzXCI6IGZhbHNlLFxuICAvLyBXYXJucyBpZiBgc3VwZXIoKWAgYXBwZWFycyB0d2ljZSBpbiBhIGNvbnN0cnVjdG9yLlxuICBcIm5vLWR1cGxpY2F0ZS1zdXBlclwiOiB0cnVlLFxuICAvLyBQcmV2ZW50cyBkdXBsaWNhdGUgY2FzZXMgaW4gc3dpdGNoIHN0YXRlbWVudHMuXG4gIFwibm8tZHVwbGljYXRlLXN3aXRjaC1jYXNlXCI6IHRydWUsXG4gIC8vIERpc2FsbG93cyBkdXBsaWNhdGUgdmFyaWFibGUgZGVjbGFyYXRpb25zIGluIHRoZSBzYW1lIGJsb2NrIHNjb3BlLlxuICBcIm5vLWR1cGxpY2F0ZS12YXJpYWJsZVwiOiB0cnVlLFxuICAvLyBEaXNhbGxvd3MgZW1wdHkgYmxvY2tzLlxuICBcIm5vLWVtcHR5XCI6IGZhbHNlLFxuICAvLyBGb3JiaWRzIGVtcHR5IGludGVyZmFjZXMuXG4gIFwibm8tZW1wdHktaW50ZXJmYWNlXCI6IGZhbHNlLFxuICAvLyBEaXNhbGxvd3MgYGV2YWxgIGZ1bmN0aW9uIGludm9jYXRpb25zLlxuICBcIm5vLWV2YWxcIjogdHJ1ZSxcbiAgLy8gRGlzYWxsb3dzIGltcG9ydGluZyBtb2R1bGVzIHRoYXQgYXJlIG5vdCBsaXN0ZWQgYXMgZGVwZW5kZW5jeSBpbiB0aGUgcHJvamVjdOKAmXMgcGFja2FnZS5qc29uXG4gIFwibm8taW1wbGljaXQtZGVwZW5kZW5jaWVzXCI6IFt0cnVlLCBcImRldlwiLCBcIm9wdGlvbmFsXCJdLFxuICAvLyBBdm9pZCBpbXBvcnQgc3RhdGVtZW50cyB3aXRoIHNpZGUtZWZmZWN0LlxuICBcIm5vLWltcG9ydC1zaWRlLWVmZmVjdFwiOiBmYWxzZSxcbiAgLy8gRGlzYWxsb3dzIGV4cGxpY2l0IHR5cGUgZGVjbGFyYXRpb25zIGZvciB2YXJpYWJsZXMgb3IgcGFyYW1ldGVycyBpbml0aWFsaXplZCB0byBhIG51bWJlcixcbiAgLy8gc3RyaW5nLCBvciBib29sZWFuLlxuICBcIm5vLWluZmVycmFibGUtdHlwZXNcIjogZmFsc2UsXG4gIC8vIERpc2FsbG93cyBpbnRlcm5hbCBgbW9kdWxlYC5cbiAgXCJuby1pbnRlcm5hbC1tb2R1bGVcIjogdHJ1ZSxcbiAgLy8gV2FybnMgb24gdXNlIG9mIGAke2AgaW4gbm9uLXRlbXBsYXRlIHN0cmluZ3MuXG4gIFwibm8taW52YWxpZC10ZW1wbGF0ZS1zdHJpbmdzXCI6IHRydWUsXG4gIC8vIERpc2FsbG93cyB1c2luZyB0aGUgYHRoaXNgIGtleXdvcmQgb3V0c2lkZSBvZiBjbGFzc2VzLlxuICBcIm5vLWludmFsaWQtdGhpc1wiOiBmYWxzZSxcbiAgLy8gRGlzYWxsb3dzIGlycmVndWxhciB3aGl0ZXNwYWNlIG91dHNpZGUgb2Ygc3RyaW5ncyBhbmQgY29tbWVudHNcbiAgXCJuby1pcnJlZ3VsYXItd2hpdGVzcGFjZVwiOiB0cnVlLFxuICAvLyBEaXNhbGxvd3MgdGhlIHVzZSBjb25zdGFudCBudW1iZXIgdmFsdWVzIG91dHNpZGUgb2YgdmFyaWFibGUgYXNzaWdubWVudHMuXG4gIFwibm8tbWFnaWMtbnVtYmVyc1wiOiBmYWxzZSxcbiAgLy8gRGlzYWxsb3dzIG1lcmdlYWJsZSBuYW1lc3BhY2VzIGluIHRoZSBzYW1lIGZpbGUuXG4gIFwibm8tbWVyZ2VhYmxlLW5hbWVzcGFjZVwiOiBmYWxzZSxcbiAgLy8gRGlzYWxsb3dzIHVzZSBvZiBpbnRlcm5hbCBgbW9kdWxlYHMgYW5kIGBuYW1lc3BhY2Vgcy5cbiAgXCJuby1uYW1lc3BhY2VcIjogZmFsc2UsXG4gIC8vIFdhcm5zIG9uIGFwcGFyZW50IGF0dGVtcHRzIHRvIGRlZmluZSBjb25zdHJ1Y3RvcnMgZm9yIGludGVyZmFjZXMgb3IgYG5ld2AgZm9yIGNsYXNzZXMuXG4gIFwibm8tbWlzdXNlZC1uZXdcIjogdHJ1ZSxcbiAgLy8gRGlzYWxsb3dzIG5vbi1udWxsIGFzc2VydGlvbnMuXG4gIFwibm8tbm9uLW51bGwtYXNzZXJ0aW9uXCI6IGZhbHNlLFxuICAvLyBEaXNhbGxvd3MgdXNlIG9mIHRoZSBgbnVsbGAga2V5d29yZCBsaXRlcmFsLlxuICBcIm5vLW51bGwta2V5d29yZFwiOiBmYWxzZSxcbiAgLy8gRm9yYmlkcyBhbiBvYmplY3QgbGl0ZXJhbCB0byBhcHBlYXIgaW4gYSB0eXBlIGFzc2VydGlvbiBleHByZXNzaW9uLiBDYXN0aW5nIHRvIGBhbnlgIGlzIHN0aWxsIGFsbG93ZWQuXG4gIFwibm8tb2JqZWN0LWxpdGVyYWwtdHlwZS1hc3NlcnRpb25cIjogZmFsc2UsXG4gIC8vIERpc2FsbG93cyBwYXJhbWV0ZXIgcHJvcGVydGllcyBpbiBjbGFzcyBjb25zdHJ1Y3RvcnMuXG4gIFwibm8tcGFyYW1ldGVyLXByb3BlcnRpZXNcIjogdHJ1ZSxcbiAgLy8gRGlzYWxsb3dzIHJlYXNzaWduaW5nIHBhcmFtZXRlcnMuXG4gIFwibm8tcGFyYW1ldGVyLXJlYXNzaWdubWVudFwiOiBmYWxzZSxcbiAgLy8gRGlzYWxsb3dzIGAvLy8gPHJlZmVyZW5jZSBwYXRoPT5gIGltcG9ydHMgKHVzZSBFUzYtc3R5bGUgaW1wb3J0cyBpbnN0ZWFkKS5cbiAgXCJuby1yZWZlcmVuY2VcIjogdHJ1ZSxcbiAgLy8gRGlzYWxsb3dzIGludm9jYXRpb24gb2YgYHJlcXVpcmUoKWAuXG4gIFwibm8tcmVxdWlyZS1pbXBvcnRzXCI6IHRydWUsXG4gIC8vIERpc2FsbG93cyB1bm5lY2Vzc2FyeSBgcmV0dXJuIGF3YWl0YC5cbiAgXCJuby1yZXR1cm4tYXdhaXRcIjogdHJ1ZSxcbiAgLy8gRGlzYWxsb3dzIHNoYWRvd2luZyB2YXJpYWJsZSBkZWNsYXJhdGlvbnMuXG4gIFwibm8tc2hhZG93ZWQtdmFyaWFibGVcIjogZmFsc2UsXG4gIC8vIEZvcmJpZHMgYXJyYXkgbGl0ZXJhbHMgdG8gY29udGFpbiBtaXNzaW5nIGVsZW1lbnRzLlxuICBcIm5vLXNwYXJzZS1hcnJheXNcIjogdHJ1ZSxcbiAgLy8gRGlzYWxsb3dzIG9iamVjdCBhY2Nlc3MgdmlhIHN0cmluZyBsaXRlcmFscy5cbiAgXCJuby1zdHJpbmctbGl0ZXJhbFwiOiBmYWxzZSxcbiAgLy8gRmxhZ3MgdGhyb3dpbmcgcGxhaW4gc3RyaW5ncyBvciBjb25jYXRlbmF0aW9ucyBvZiBzdHJpbmdzLlxuICBcIm5vLXN0cmluZy10aHJvd1wiOiB0cnVlLFxuICAvLyBEaXNhbGxvd3MgaW1wb3J0aW5nIGFueSBzdWJtb2R1bGUuXG4gIFwibm8tc3VibW9kdWxlLWltcG9ydHNcIjogZmFsc2UsXG4gIC8vIERpc2FsbG93cyBmYWxsaW5nIHRocm91Z2ggY2FzZSBzdGF0ZW1lbnRzLlxuICBcIm5vLXN3aXRjaC1jYXNlLWZhbGwtdGhyb3VnaFwiOiB0cnVlLFxuICAvLyBEaXNhbGxvd3MgdW5uZWNlc3NhcnkgcmVmZXJlbmNlcyB0byBgdGhpc2AuXG4gIFwibm8tdGhpcy1hc3NpZ25tZW50XCI6IFt0cnVlLCB7XCJhbGxvdy1kZXN0cnVjdHVyaW5nXCI6IHRydWV9XSxcbiAgLy8gRGlzYWxsb3dzIHRyYWlsaW5nIHdoaXRlc3BhY2UgYXQgdGhlIGVuZCBvZiBhIGxpbmUuXG4gIFwibm8tdHJhaWxpbmctd2hpdGVzcGFjZVwiOiB0cnVlLFxuICAvLyBSZXBsYWNlcyBgeCA9PiBmKHgpYCB3aXRoIGp1c3QgYGZgLlxuICBcIm5vLXVubmVjZXNzYXJ5LWNhbGxiYWNrLXdyYXBwZXJcIjogdHJ1ZSxcbiAgLy8gRm9yYmlkcyBhIOKAmHZhcuKAmS/igJlsZXTigJkgc3RhdGVtZW50IG9yIGRlc3RydWN0dXJpbmcgaW5pdGlhbGl6ZXIgdG8gYmUgaW5pdGlhbGl6ZWQgdG8g4oCYdW5kZWZpbmVk4oCZLlxuICBcIm5vLXVubmVjZXNzYXJ5LWluaXRpYWxpemVyXCI6IGZhbHNlLFxuICAvLyBEaXNhbGxvd3MgY29udHJvbCBmbG93IHN0YXRlbWVudHMsIHN1Y2ggYXMgcmV0dXJuLCBjb250aW51ZSwgYnJlYWsgYW5kIHRocm93cyBpbiBmaW5hbGx5XG4gIC8vIGJsb2Nrcy5cbiAgXCJuby11bnNhZmUtZmluYWxseVwiOiB0cnVlLFxuICAvLyBEaXNhbGxvd3MgdW51c2VkIGV4cHJlc3Npb24gc3RhdGVtZW50cy5cbiAgXCJuby11bnVzZWQtZXhwcmVzc2lvblwiOiB0cnVlLFxuICAvLyBEaXNhbGxvd3MgdXNhZ2Ugb2YgdGhlIGB2YXJgIGtleXdvcmQuXG4gIFwibm8tdmFyLWtleXdvcmRcIjogdHJ1ZSxcbiAgLy8gRGlzYWxsb3dzIHRoZSB1c2Ugb2YgcmVxdWlyZSBzdGF0ZW1lbnRzIGV4Y2VwdCBpbiBpbXBvcnQgc3RhdGVtZW50cy5cbiAgXCJuby12YXItcmVxdWlyZXNcIjogdHJ1ZSxcbiAgLy8gQ2hlY2tzIHRoYXQgZGVjaW1hbCBsaXRlcmFscyBzaG91bGQgYmVnaW4gd2l0aCBgMC5gIGluc3RlYWQgb2YganVzdCBgLmAsIGFuZCBzaG91bGQgbm90IGVuZCB3aXRoIGEgdHJhaWxpbmcgYDBgLlxuICAvLyBUT0RPOiBFbmFibGUgaXQgd2hlbiB0aGUgb3B0aW9uIHRvIGVuZm9yY2UgbG93ZXJjYXNlIGhleCBpcyBhdmFpbGFibGVcbiAgXCJudW1iZXItbGl0ZXJhbC1mb3JtYXRcIjogZmFsc2UsXG4gIC8vIEVuZm9yY2VzIGNvbnNpc3RlbnQgb2JqZWN0IGxpdGVyYWwgcHJvcGVydHkgcXVvdGUgc3R5bGUuXG4gIFwib2JqZWN0LWxpdGVyYWwta2V5LXF1b3Rlc1wiOiBbdHJ1ZSwgXCJjb25zaXN0ZW50LWFzLW5lZWRlZFwiXSxcbiAgLy8gRW5mb3JjZXMgdXNlIG9mIEVTNiBvYmplY3QgbGl0ZXJhbCBzaG9ydGhhbmQgd2hlbiBwb3NzaWJsZS5cbiAgXCJvYmplY3QtbGl0ZXJhbC1zaG9ydGhhbmRcIjogdHJ1ZSxcbiAgLy8gUmVxdWlyZXMga2V5cyBpbiBvYmplY3QgbGl0ZXJhbHMgdG8gYmUgc29ydGVkIGFscGhhYmV0aWNhbGx5LlxuICBcIm9iamVjdC1saXRlcmFsLXNvcnQta2V5c1wiOiBmYWxzZSxcbiAgLy8gUmVxdWlyZXMgdGhlIHNwZWNpZmllZCB0b2tlbnMgdG8gYmUgb24gdGhlIHNhbWUgbGluZSBhcyB0aGUgZXhwcmVzc2lvbiBwcmVjZWRpbmcgdGhlbS5cbiAgXCJvbmUtbGluZVwiOiBbXG4gICAgdHJ1ZSxcbiAgICAvLyBDaGVja3MgdGhhdCBgY2F0Y2hgIGlzIG9uIHRoZSBzYW1lIGxpbmUgYXMgdGhlIGNsb3NpbmcgYnJhY2UgZm9yIGB0cnlgLlxuICAgIFwiY2hlY2stY2F0Y2hcIixcbiAgICAvLyBDaGVja3MgdGhhdCBgZmluYWxseWAgaXMgb24gdGhlIHNhbWUgbGluZSBhcyB0aGUgY2xvc2luZyBicmFjZSBmb3IgYGNhdGNoYC5cbiAgICBcImNoZWNrLWZpbmFsbHlcIixcbiAgICAvLyBDaGVja3MgdGhhdCBgZWxzZWAgaXMgb24gdGhlIHNhbWUgbGluZSBhcyB0aGUgY2xvc2luZyBicmFjZSBmb3IgYGlmYC5cbiAgICBcImNoZWNrLWVsc2VcIixcbiAgICAvLyBDaGVja3MgdGhhdCBhbiBvcGVuIGJyYWNlIGZhbGxzIG9uIHRoZSBzYW1lIGxpbmUgYXMgaXRzIHByZWNlZGluZyBleHByZXNzaW9uLlxuICAgIFwiY2hlY2stb3Blbi1icmFjZVwiLFxuICAgIC8vIENoZWNrcyBwcmVjZWRpbmcgd2hpdGVzcGFjZSBmb3IgdGhlIHNwZWNpZmllZCB0b2tlbnMuXG4gICAgXCJjaGVjay13aGl0ZXNwYWNlXCIsXG4gIF0sXG4gIC8vIERpc2FsbG93cyBtdWx0aXBsZSB2YXJpYWJsZSBkZWZpbml0aW9ucyBpbiB0aGUgc2FtZSBkZWNsYXJhdGlvbiBzdGF0ZW1lbnQuXG4gIFwib25lLXZhcmlhYmxlLXBlci1kZWNsYXJhdGlvblwiOiBbdHJ1ZSwgXCJpZ25vcmUtZm9yLWxvb3BcIl0sXG4gIC8vIERpc2FsbG93cyB0cmFkaXRpb25hbCAobm9uLWFycm93KSBmdW5jdGlvbiBleHByZXNzaW9ucy5cbiAgXCJvbmx5LWFycm93LWZ1bmN0aW9uc1wiOiBmYWxzZSxcbiAgLy8gUmVxdWlyZXMgdGhhdCBpbXBvcnQgc3RhdGVtZW50cyBiZSBhbHBoYWJldGl6ZWQuXG4gIFwib3JkZXJlZC1pbXBvcnRzXCI6IHRydWUsXG4gIC8vIFJlY29tbWVuZHMgdG8gdXNlIGEgY29uZGl0aW9uYWwgZXhwcmVzc2lvbiBpbnN0ZWFkIG9mIGFzc2lnbmluZyB0byB0aGUgc2FtZSB0aGluZyBpbiBlYWNoIGJyYW5jaCBvZiBhbiBpZlxuICAvLyBzdGF0ZW1lbnQuXG4gIFwicHJlZmVyLWNvbmRpdGlvbmFsLWV4cHJlc3Npb25cIjogZmFsc2UsXG4gIC8vIFJlcXVpcmVzIHRoYXQgdmFyaWFibGUgZGVjbGFyYXRpb25zIHVzZSBjb25zdCBpbnN0ZWFkIG9mIGxldCBpZiBwb3NzaWJsZS5cbiAgXCJwcmVmZXItY29uc3RcIjogdHJ1ZSxcbiAgLy8gUmVjb21tZW5kcyBhIOKAmGZvci1vZuKAmSBsb29wIG92ZXIgYSBzdGFuZGFyZCDigJhmb3LigJkgbG9vcCBpZiB0aGUgaW5kZXggaXMgb25seSB1c2VkIHRvIGFjY2Vzc1xuICAvLyB0aGUgYXJyYXkgYmVpbmcgaXRlcmF0ZWQuXG4gIFwicHJlZmVyLWZvci1vZlwiOiB0cnVlLFxuICAvLyBXYXJucyBmb3IgY2xhc3MgbWV0aG9kcyB0aGF0IGRvIG5vdCB1c2UgYHRoaXNgLlxuICBcInByZWZlci1mdW5jdGlvbi1vdmVyLW1ldGhvZFwiOiBmYWxzZSxcbiAgLy8gUHJlZmVyIGBmb28oKTogdm9pZGAgb3ZlciBgZm9vOiAoKSA9PiB2b2lkYCBpbiBpbnRlcmZhY2VzIGFuZCB0eXBlcy5cbiAgXCJwcmVmZXItbWV0aG9kLXNpZ25hdHVyZVwiOiB0cnVlLFxuICAvLyBFbmZvcmNlcyB0aGUgdXNlIG9mIHRoZSBFUzIwMTUgb2JqZWN0IHNwcmVhZCBvcGVyYXRvciBvdmVyIGBPYmplY3QuYXNzaWduKClgIHdoZXJlIGFwcHJvcHJpYXRlLlxuICBcInByZWZlci1vYmplY3Qtc3ByZWFkXCI6IHRydWUsXG4gIC8vIFByZWZlciBhIGBzd2l0Y2hgIHN0YXRlbWVudCB0byBhbiBgaWZgIHN0YXRlbWVudCB3aXRoIHNpbXBsZSBgPT09YCBjb21wYXJpc29ucy5cbiAgXCJwcmVmZXItc3dpdGNoXCI6IHRydWUsXG4gIC8vIFByZWZlciBhIHRlbXBsYXRlIGV4cHJlc3Npb24gb3ZlciBzdHJpbmcgbGl0ZXJhbCBjb25jYXRlbmF0aW9uLlxuICBcInByZWZlci10ZW1wbGF0ZVwiOiBbdHJ1ZSwgXCJhbGxvdy1zaW5nbGUtY29uY2F0XCJdLFxuICAvLyBSZXF1aXJlcyBzaW5nbGUgb3IgZG91YmxlIHF1b3RlcyBmb3Igc3RyaW5nIGxpdGVyYWxzLlxuICBcInF1b3RlbWFya1wiOiBbXG4gICAgdHJ1ZSxcbiAgICAvLyBFbmZvcmNlcyBkb3VibGUgcXVvdGVzLlxuICAgIFwiZG91YmxlXCIsXG4gICAgLy8gRm9yYmlkcyBzaW5nbGUtbGluZSB1bnRhZ2dlZCB0ZW1wbGF0ZSBzdHJpbmdzIHRoYXQgZG8gbm90IGNvbnRhaW4gc3RyaW5nIGludGVycG9sYXRpb25zLlxuICAgIFwiYXZvaWQtdGVtcGxhdGVcIixcbiAgICAvLyBBbGxvd3MgeW91IHRvIHVzZSB0aGUg4oCcb3RoZXLigJ0gcXVvdGVtYXJrIGluIGNhc2VzIHdoZXJlIGVzY2FwaW5nIHdvdWxkIG5vcm1hbGx5IGJlIHJlcXVpcmVkLlxuICAgIFwiYXZvaWQtZXNjYXBlXCIsXG4gIF0sXG4gIC8vIFJlcXVpcmVzIHRoZSByYWRpeCBwYXJhbWV0ZXIgdG8gYmUgc3BlY2lmaWVkIHdoZW4gY2FsbGluZyBgcGFyc2VJbnRgLlxuICBcInJhZGl4XCI6IHRydWUsXG4gIC8vIEVuZm9yY2VzIGNvbnNpc3RlbnQgc2VtaWNvbG9uIHVzYWdlIGF0IHRoZSBlbmQgb2YgZXZlcnkgc3RhdGVtZW50LlxuICBcInNlbWljb2xvblwiOiBbdHJ1ZSwgXCJhbHdheXNcIl0sXG4gIC8vIFJlcXVpcmUgb3IgZGlzYWxsb3cgYSBzcGFjZSBiZWZvcmUgZnVuY3Rpb24gcGFyZW50aGVzaXNcbiAgXCJzcGFjZS1iZWZvcmUtZnVuY3Rpb24tcGFyZW5cIjogW1xuICAgIHRydWUsXG4gICAge1xuICAgICAgYW5vbnltb3VzOiBcImFsd2F5c1wiLFxuICAgICAgbmFtZWQ6IFwibmV2ZXJcIixcbiAgICAgIGFzeW5jQXJyb3c6IFwiYWx3YXlzXCIsXG4gICAgICBtZXRob2Q6IFwibmV2ZXJcIixcbiAgICAgIGNvbnN0cnVjdG9yOiBcIm5ldmVyXCIsXG4gICAgfSxcbiAgXSxcbiAgLy8gRW5mb3JjZXMgc3BhY2VzIHdpdGhpbiBwYXJlbnRoZXNlcyBvciBkaXNhbGxvdyB0aGVtLlxuICBcInNwYWNlLXdpdGhpbi1wYXJlbnNcIjogW3RydWUsIDBdLFxuICAvLyBSZXF1aXJlcyBhIGBkZWZhdWx0YCBjYXNlIGluIGFsbCBgc3dpdGNoYCBzdGF0ZW1lbnRzLlxuICBcInN3aXRjaC1kZWZhdWx0XCI6IHRydWUsXG4gIC8vIENoZWNrcyB3aGV0aGVyIHRoZSBmaW5hbCBjbGF1c2Ugb2YgYSBzd2l0Y2ggc3RhdGVtZW50IGVuZHMgaW4gYGJyZWFrO2AuXG4gIFwic3dpdGNoLWZpbmFsLWJyZWFrXCI6IFt0cnVlLCBcImFsd2F5c1wiXSxcbiAgLy8gUmVxdWlyZXMgb3IgZGlzYWxsb3dzIHRyYWlsaW5nIGNvbW1hcyBpbiBhcnJheSBhbmQgb2JqZWN0IGxpdGVyYWxzLCBkZXN0cnVjdHVyaW5nXG4gIC8vIGFzc2lnbm1lbnRzLCBmdW5jdGlvbiBhbmQgdHVwbGUgdHlwaW5ncywgbmFtZWQgaW1wb3J0cyBhbmQgZnVuY3Rpb24gcGFyYW1ldGVycy5cbiAgXCJ0cmFpbGluZy1jb21tYVwiOiBbXG4gICAgdHJ1ZSxcbiAgICB7XG4gICAgICAvLyBDaGVja3MgbXVsdGktbGluZSBvYmplY3QgbGl0ZXJhbHMuXG4gICAgICBtdWx0aWxpbmU6IFwiYWx3YXlzXCIsXG4gICAgICAvLyBDaGVja3Mgc2luZ2xlLWxpbmUgb2JqZWN0IGxpdGVyYWxzLlxuICAgICAgc2luZ2xlbGluZTogXCJuZXZlclwiLFxuICAgIH0sXG4gIF0sXG4gIC8vIFJlcXVpcmVzIGA9PT1gIGFuZCBgIT09YCBpbiBwbGFjZSBvZiBgPT1gIGFuZCBgIT1gLlxuICBcInRyaXBsZS1lcXVhbHNcIjogdHJ1ZSxcbiAgLy8gQ2hlY2tzIHRoYXQgdHlwZSBsaXRlcmFsIG1lbWJlcnMgYXJlIHNlcGFyYXRlZCBieSBzZW1pY29sb25zLiBFbmZvcmNlcyBhIHRyYWlsaW5nIHNlbWljb2xvbiBmb3IgbXVsdGlsaW5lIHR5cGVcbiAgLy8gbGl0ZXJhbHMuXG4gIFwidHlwZS1saXRlcmFsLWRlbGltaXRlclwiOiB0cnVlLFxuICAvLyBSZXF1aXJlcyB0eXBlIGRlZmluaXRpb25zIHRvIGV4aXN0LlxuICBcInR5cGVkZWZcIjogW1xuICAgIHRydWUsXG4gICAgLy8gQ2hlY2sgcmV0dXJuIHR5cGVzIG9mIGludGVyZmFjZSBwcm9wZXJ0aWVzLlxuICAgIFwicHJvcGVydHktZGVjbGFyYXRpb25cIixcbiAgICAvLyBDaGVjayB2YXJpYWJsZSBkZWNsYXJhdGlvbnMuXG4gICAgXCJ2YXJpYWJsZS1kZWNsYXJhdGlvblwiLFxuICAgIC8vIENoZWNrIG1lbWJlciB2YXJpYWJsZSBkZWNsYXJhdGlvbnMuXG4gICAgXCJtZW1iZXItdmFyaWFibGUtZGVjbGFyYXRpb25cIixcbiAgXSxcbiAgLy8gUmVxdWlyZXMgb3IgZGlzYWxsb3dzIHdoaXRlc3BhY2UgZm9yIHR5cGUgZGVmaW5pdGlvbnMuXG4gIFwidHlwZWRlZi13aGl0ZXNwYWNlXCI6IFtcbiAgICB0cnVlLFxuICAgIC8vIFNwZWNpZmllcyBob3cgbXVjaCBzcGFjZSBzaG91bGQgYmUgdG8gdGhlIF9sZWZ0XyBvZiBhIHR5cGVkZWYgY29sb24uXG4gICAge1xuICAgICAgXCJjYWxsLXNpZ25hdHVyZVwiOiBcIm5vc3BhY2VcIixcbiAgICAgIFwiaW5kZXgtc2lnbmF0dXJlXCI6IFwibm9zcGFjZVwiLFxuICAgICAgXCJwYXJhbWV0ZXJcIjogXCJub3NwYWNlXCIsXG4gICAgICBcInByb3BlcnR5LWRlY2xhcmF0aW9uXCI6IFwibm9zcGFjZVwiLFxuICAgICAgXCJ2YXJpYWJsZS1kZWNsYXJhdGlvblwiOiBcIm5vc3BhY2VcIixcbiAgICB9LFxuICAgIC8vIFNwZWNpZmllcyBob3cgbXVjaCBzcGFjZSBzaG91bGQgYmUgdG8gdGhlIF9yaWdodF8gb2YgYSB0eXBlZGVmIGNvbG9uLlxuICAgIHtcbiAgICAgIFwiY2FsbC1zaWduYXR1cmVcIjogXCJvbmVzcGFjZVwiLFxuICAgICAgXCJpbmRleC1zaWduYXR1cmVcIjogXCJvbmVzcGFjZVwiLFxuICAgICAgXCJwYXJhbWV0ZXJcIjogXCJvbmVzcGFjZVwiLFxuICAgICAgXCJwcm9wZXJ0eS1kZWNsYXJhdGlvblwiOiBcIm9uZXNwYWNlXCIsXG4gICAgICBcInZhcmlhYmxlLWRlY2xhcmF0aW9uXCI6IFwib25lc3BhY2VcIixcbiAgICB9LFxuICBdLFxuICAvLyBNYWtlcyBzdXJlIHJlc3VsdCBvZiBgdHlwZW9mYCBpcyBjb21wYXJlZCB0byBjb3JyZWN0IHN0cmluZyB2YWx1ZXMuXG4gIFwidHlwZW9mLWNvbXBhcmVcIjogdHJ1ZSxcbiAgLy8gV2FybnMgZm9yIGFueSB0d28gb3ZlcmxvYWRzIHRoYXQgY291bGQgYmUgdW5pZmllZCBpbnRvIG9uZSBieSB1c2luZyBhIHVuaW9uIG9yIGFuIG9wdGlvbmFsL3Jlc3QgcGFyYW1ldGVyLlxuICBcInVuaWZpZWQtc2lnbmF0dXJlc1wiOiB0cnVlLFxuICAvLyBFbmZvcmNlcyB1c2Ugb2YgdGhlIGBpc05hTigpYCBmdW5jdGlvbiB0byBjaGVjayBmb3IgTmFOIHJlZmVyZW5jZXMgaW5zdGVhZCBvZiBhIGNvbXBhcmlzb25cbiAgLy8gdG8gdGhlIGBOYU5gIGNvbnN0YW50LlxuICBcInVzZS1pc25hblwiOiB0cnVlLFxuICAvLyBDaGVja3MgdmFyaWFibGUgbmFtZXMgZm9yIHZhcmlvdXMgZXJyb3JzLlxuICBcInZhcmlhYmxlLW5hbWVcIjogW3RydWUsIFwiY2hlY2stZm9ybWF0XCIsIFwiYWxsb3ctbGVhZGluZy11bmRlcnNjb3JlXCJdLFxuICAvLyBFbmZvcmNlcyB3aGl0ZXNwYWNlIHN0eWxlIGNvbnZlbnRpb25zLlxuICBcIndoaXRlc3BhY2VcIjogW1xuICAgIHRydWUsXG4gICAgLy8gQ2hlY2tzIGJyYW5jaGluZyBzdGF0ZW1lbnRzIChgaWZgL2BlbHNlYC9mYG9yYC9gd2hpbGVgKSBhcmUgZm9sbG93ZWQgYnkgd2hpdGVzcGFjZS5cbiAgICBcImNoZWNrLWJyYW5jaFwiLFxuICAgIC8vIENoZWNrcyB0aGF0IHZhcmlhYmxlIGRlY2xhcmF0aW9ucyBoYXZlIHdoaXRlc3BhY2UgYXJvdW5kIHRoZSBlcXVhbHMgdG9rZW4uXG4gICAgXCJjaGVjay1kZWNsXCIsXG4gICAgLy8gQ2hlY2tzIGZvciB3aGl0ZXNwYWNlIGFyb3VuZCBvcGVyYXRvciB0b2tlbnMuXG4gICAgXCJjaGVjay1vcGVyYXRvclwiLFxuICAgIC8vIENoZWNrcyBmb3Igd2hpdGVzcGFjZSBpbiBpbXBvcnQgJiBleHBvcnQgc3RhdGVtZW50cy5cbiAgICBcImNoZWNrLW1vZHVsZVwiLFxuICAgIC8vIENoZWNrcyBmb3Igd2hpdGVzcGFjZSBhZnRlciBzZXBhcmF0b3IgdG9rZW5zIChgLGAvYDtgKS5cbiAgICBcImNoZWNrLXNlcGFyYXRvclwiLFxuICAgIC8vIENoZWNrcyB0aGF0IHRoZXJlIGlzIG5vIHdoaXRlc3BhY2UgYWZ0ZXIgcmVzdC9zcHJlYWQgb3BlcmF0b3IgKGAuLi5gKS5cbiAgICBcImNoZWNrLXJlc3Qtc3ByZWFkXCIsXG4gICAgLy8gQ2hlY2tzIGZvciB3aGl0ZXNwYWNlIGJlZm9yZSBhIHZhcmlhYmxlIHR5cGUgc3BlY2lmaWNhdGlvbi5cbiAgICBcImNoZWNrLXR5cGVcIixcbiAgICAvLyBDaGVja3MgZm9yIHdoaXRlc3BhY2UgYmV0d2VlbiBhIHR5cGVjYXN0IGFuZCBpdHMgdGFyZ2V0LlxuICAgIFwiY2hlY2stdHlwZWNhc3RcIixcbiAgICAvLyBDaGVja3MgZm9yIHdoaXRlc3BhY2UgYmV0d2VlbiB0eXBlIG9wZXJhdG9ycyBgfGAgYW5kIGAmYC5cbiAgICBcImNoZWNrLXR5cGUtb3BlcmF0b3JcIixcbiAgICAvLyBDaGVja3MgZm9yIHdoaXRlc3BhY2UgYmVmb3JlIHRoZSBvcGVuaW5nIGJyYWNlIG9mIGEgYmxvY2suXG4gICAgXCJjaGVjay1wcmVibG9ja1wiLFxuICBdLFxufTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfVFlQRURfVFNMSU5UX1JVTEVTOiBUc2xpbnRDb25maWd1cmF0aW9uLlJhd1J1bGVzQ29uZmlnID0ge1xuICAuLi5ERUZBVUxUX1VOVFlQRURfVFNMSU5UX1JVTEVTLFxuICAvLyBXYXJucyBmb3IgYW4gYXdhaXRlZCB2YWx1ZSB0aGF0IGlzIG5vdCBhIFByb21pc2UuXG4gIFwiYXdhaXQtcHJvbWlzZVwiOiB0cnVlLFxuICAvLyBFbmZvcmNlcyBkb2N1bWVudGF0aW9uIGZvciBpbXBvcnRhbnQgaXRlbXMgYmUgZmlsbGVkIG91dC5cbiAgXCJjb21wbGV0ZWQtZG9jc1wiOiBbdHJ1ZSwgW1wiY2xhc3Nlc1wiLCBcImZ1bmN0aW9uc1wiXV0sXG4gIC8vIFdhcm5zIHdoZW4gZGVwcmVjYXRlZCBBUElzIGFyZSB1c2VkLlxuICBcImRlcHJlY2F0aW9uXCI6IHRydWUsXG4gIC8vIFJlcXVpcmVzIHRoYXQgYSBkZWZhdWx0IGltcG9ydCBoYXZlIHRoZSBzYW1lIG5hbWUgYXMgdGhlIGRlY2xhcmF0aW9uIGl0IGltcG9ydHMuIERvZXMgbm90aGluZyBmb3IgYW5vbnltb3VzXG4gIC8vIGRlZmF1bHQgZXhwb3J0cy5cbiAgXCJtYXRjaC1kZWZhdWx0LWV4cG9ydC1uYW1lXCI6IGZhbHNlLFxuICAvLyBXYXJucyBvbiBjb21wYXJpc29uIHRvIGEgYm9vbGVhbiBsaXRlcmFsLCBhcyBpbiBgeCA9PT0gdHJ1ZWAuXG4gIFwibm8tYm9vbGVhbi1saXRlcmFsLWNvbXBhcmVcIjogdHJ1ZSxcbiAgLy8gUHJvbWlzZXMgcmV0dXJuZWQgYnkgZnVuY3Rpb25zIG11c3QgYmUgaGFuZGxlZCBhcHByb3ByaWF0ZWx5LlxuICBcIm5vLWZsb2F0aW5nLXByb21pc2VzXCI6IHRydWUsXG4gIC8vIERpc2FsbG93cyBpdGVyYXRpbmcgb3ZlciBhbiBhcnJheSB3aXRoIGEgZm9yLWluIGxvb3AuXG4gIFwibm8tZm9yLWluLWFycmF5XCI6IHRydWUsXG4gIC8vIERpc2FsbG