diff --git a/bricks/dart_frog_prod_server/__brick__/build/{{#addDockerfile}}Dockerfile{{/addDockerfile}} b/bricks/dart_frog_prod_server/__brick__/build/{{#addDockerfile}}Dockerfile{{/addDockerfile}} index 419aae58a..003367138 100644 --- a/bricks/dart_frog_prod_server/__brick__/build/{{#addDockerfile}}Dockerfile{{/addDockerfile}} +++ b/bricks/dart_frog_prod_server/__brick__/build/{{#addDockerfile}}Dockerfile{{/addDockerfile}} @@ -19,6 +19,7 @@ COPY ./pubspec_overrides.yaml ./pubspec_overrides.yaml {{/hasExternalDependencies}} # Resolve app dependencies. COPY pubspec.* ./ +COPY pubspec_overrides.yaml* ./ RUN dart pub get # Copy app source code and AOT compile it. diff --git a/bricks/dart_frog_prod_server/hooks/lib/dart_frog_prod_server_hooks.dart b/bricks/dart_frog_prod_server/hooks/lib/dart_frog_prod_server_hooks.dart index 8a36f3de3..f4382304f 100644 --- a/bricks/dart_frog_prod_server/hooks/lib/dart_frog_prod_server_hooks.dart +++ b/bricks/dart_frog_prod_server/hooks/lib/dart_frog_prod_server_hooks.dart @@ -1,6 +1,9 @@ +export 'src/copy_workspace_pubspec_lock.dart'; export 'src/create_bundle.dart'; export 'src/create_external_packages_folder.dart'; export 'src/dart_pub_get.dart'; +export 'src/disable_workspace_resolution.dart'; export 'src/exit_overrides.dart'; export 'src/get_internal_path_dependencies.dart'; -export 'src/get_pubspec_lock.dart'; +export 'src/get_pubspec.dart'; +export 'src/uses_workspace_resolution.dart'; diff --git a/bricks/dart_frog_prod_server/hooks/lib/src/copy_workspace_pubspec_lock.dart b/bricks/dart_frog_prod_server/hooks/lib/src/copy_workspace_pubspec_lock.dart new file mode 100644 index 000000000..f26994771 --- /dev/null +++ b/bricks/dart_frog_prod_server/hooks/lib/src/copy_workspace_pubspec_lock.dart @@ -0,0 +1,71 @@ +import 'dart:io'; +import 'package:mason/mason.dart'; +import 'package:path/path.dart' as path; +import 'package:pubspec_parse/pubspec_parse.dart'; + +/// Copies the pubspec.lock from the workspace root into the build directory +/// in order to ensure the production build uses the exact same versions of all +/// dependencies. +void copyWorkspacePubspecLock( + HookContext context, { + required String buildDirectory, + required String workingDirectory, + required void Function(int exitCode) exit, +}) { + final workspaceRoot = _getWorkspaceRoot(workingDirectory); + if (workspaceRoot == null) { + context.logger.err( + 'Unable to determine workspace root for $workingDirectory', + ); + return exit(1); + } + final pubspecLockFile = File(path.join(workspaceRoot.path, 'pubspec.lock')); + if (!pubspecLockFile.existsSync()) return; + + try { + pubspecLockFile.copySync(path.join(buildDirectory, 'pubspec.lock')); + } on Exception catch (error) { + context.logger.err('$error'); + return exit(1); + } +} + +/// Returns the root directory of the nearest Dart workspace. +Directory? _getWorkspaceRoot(String workingDirectory) { + final file = _findNearestAncestor( + where: (path) => _getWorkspaceRootPubspecYaml(cwd: Directory(path)), + cwd: Directory(workingDirectory), + ); + if (file == null || !file.existsSync()) return null; + return Directory(path.dirname(file.path)); +} + +/// The workspace root `pubspec.yaml` file for this project. +File? _getWorkspaceRootPubspecYaml({required Directory cwd}) { + try { + final pubspecYamlFile = File(path.join(cwd.path, 'pubspec.yaml')); + if (!pubspecYamlFile.existsSync()) return null; + final pubspec = Pubspec.parse(pubspecYamlFile.readAsStringSync()); + if (pubspec.workspace?.isEmpty ?? true) return null; + return pubspecYamlFile; + } on Exception { + return null; + } +} + +/// Finds nearest ancestor file +/// relative to the [cwd] that satisfies [where]. +File? _findNearestAncestor({ + required File? Function(String path) where, + required Directory cwd, +}) { + Directory? prev; + var dir = cwd; + while (prev?.path != dir.path) { + final file = where(dir.path); + if (file?.existsSync() ?? false) return file; + prev = dir; + dir = dir.parent; + } + return null; +} diff --git a/bricks/dart_frog_prod_server/hooks/lib/src/create_external_packages_folder.dart b/bricks/dart_frog_prod_server/hooks/lib/src/create_external_packages_folder.dart index 21221adde..4ec3b0139 100644 --- a/bricks/dart_frog_prod_server/hooks/lib/src/create_external_packages_folder.dart +++ b/bricks/dart_frog_prod_server/hooks/lib/src/create_external_packages_folder.dart @@ -3,6 +3,7 @@ import 'dart:io'; import 'package:dart_frog_prod_server_hooks/dart_frog_prod_server_hooks.dart'; import 'package:io/io.dart' as io; import 'package:path/path.dart' as path; +import 'package:pubspec_parse/pubspec_parse.dart'; /// Signature of [io.copyPath]. typedef CopyPath = Future Function(String from, String to); @@ -13,34 +14,27 @@ Future> createExternalPackagesFolder({ CopyPath copyPath = io.copyPath, }) async { final pathResolver = path.context; - final pubspecLock = await getPubspecLock( + final pubspec = await getPubspec( projectDirectory.path, pathContext: path.context, ); - final externalPathDependencies = pubspecLock.packages + final externalPathDependencies = pubspec.dependencies.values .map( (dependency) { - final pathDescription = dependency.pathDescription; - if (pathDescription == null) { - return null; - } - - final isExternal = !pathResolver.isWithin('', pathDescription.path); - if (!isExternal) return null; + if (dependency is! PathDependency) return null; + if (pathResolver.isWithin('', dependency.path)) return null; return _ExternalPathDependency( - name: dependency.name, - path: path.join(projectDirectory.path, pathDescription.path), + name: path.basenameWithoutExtension(dependency.path), + path: path.join(projectDirectory.path, dependency.path), ); }, ) .whereType<_ExternalPathDependency>() .toList(); - if (externalPathDependencies.isEmpty) { - return []; - } + if (externalPathDependencies.isEmpty) return []; final packagesDirectory = Directory( pathResolver.join( @@ -68,17 +62,20 @@ Future> createExternalPackagesFolder({ buildDirectory.path, 'pubspec_overrides.yaml', ), - ).writeAsString(''' + ).writeAsString( + ''' dependency_overrides: ${copiedExternalPathDependencies.map( - (dependency) { - final name = dependency.name; - final path = - pathResolver.relative(dependency.path, from: buildDirectory.path); - return ' $name:\n path: $path'; - }, - ).join('\n')} -'''); + (dependency) { + final name = dependency.name; + final path = + pathResolver.relative(dependency.path, from: buildDirectory.path); + return ' $name:\n path: $path'; + }, + ).join('\n')} +''', + mode: FileMode.append, + ); return copiedExternalPathDependencies .map((dependency) => dependency.path) diff --git a/bricks/dart_frog_prod_server/hooks/lib/src/disable_workspace_resolution.dart b/bricks/dart_frog_prod_server/hooks/lib/src/disable_workspace_resolution.dart new file mode 100644 index 000000000..2c64312b8 --- /dev/null +++ b/bricks/dart_frog_prod_server/hooks/lib/src/disable_workspace_resolution.dart @@ -0,0 +1,20 @@ +import 'dart:io'; +import 'package:mason/mason.dart'; +import 'package:path/path.dart' as path; + +/// Opts out of dart workspaces until we can generate per package lockfiles. +/// https://github.com/dart-lang/pub/issues/4594 +void disableWorkspaceResolution( + HookContext context, { + required String buildDirectory, + required void Function(int exitCode) exit, +}) { + try { + File( + path.join(buildDirectory, 'pubspec_overrides.yaml'), + ).writeAsStringSync('\nresolution: null\n', mode: FileMode.append); + } on Exception catch (e) { + context.logger.err('$e'); + exit(1); + } +} diff --git a/bricks/dart_frog_prod_server/hooks/lib/src/exit_overrides.dart b/bricks/dart_frog_prod_server/hooks/lib/src/exit_overrides.dart index 697843dbb..266af1a35 100644 --- a/bricks/dart_frog_prod_server/hooks/lib/src/exit_overrides.dart +++ b/bricks/dart_frog_prod_server/hooks/lib/src/exit_overrides.dart @@ -3,6 +3,8 @@ import 'dart:io' as io; const _asyncRunZoned = runZoned; +void defaultExit(int code) => ExitOverrides.current?.exit ?? io.exit; + abstract class ExitOverrides { static final _token = Object(); diff --git a/bricks/dart_frog_prod_server/hooks/lib/src/get_internal_path_dependencies.dart b/bricks/dart_frog_prod_server/hooks/lib/src/get_internal_path_dependencies.dart index 70fc0ae08..1bd341061 100644 --- a/bricks/dart_frog_prod_server/hooks/lib/src/get_internal_path_dependencies.dart +++ b/bricks/dart_frog_prod_server/hooks/lib/src/get_internal_path_dependencies.dart @@ -2,22 +2,16 @@ import 'dart:io' as io; import 'package:dart_frog_prod_server_hooks/dart_frog_prod_server_hooks.dart'; import 'package:path/path.dart' as path; +import 'package:pubspec_parse/pubspec_parse.dart'; Future> getInternalPathDependencies(io.Directory directory) async { - final pubspecLock = await getPubspecLock(directory.path); + final pubspec = await getPubspec(directory.path); - final internalPathDependencies = pubspecLock.packages.where( + final internalPathDependencies = pubspec.dependencies.values.where( (dependency) { - final pathDescription = dependency.pathDescription; - if (pathDescription == null) { - return false; - } - - return path.isWithin('', pathDescription.path); + return dependency is PathDependency && path.isWithin('', dependency.path); }, - ); + ).cast(); - return internalPathDependencies - .map((dependency) => dependency.pathDescription!.path) - .toList(); + return internalPathDependencies.map((dependency) => dependency.path).toList(); } diff --git a/bricks/dart_frog_prod_server/hooks/lib/src/get_pubspec.dart b/bricks/dart_frog_prod_server/hooks/lib/src/get_pubspec.dart new file mode 100644 index 000000000..8b996dd3b --- /dev/null +++ b/bricks/dart_frog_prod_server/hooks/lib/src/get_pubspec.dart @@ -0,0 +1,20 @@ +import 'dart:io'; + +import 'package:path/path.dart' as path; +import 'package:pubspec_parse/pubspec_parse.dart'; + +Future getPubspec( + String workingDirectory, { + path.Context? pathContext, +}) async { + const pubspecYaml = 'pubspec.yaml'; + final pathResolver = pathContext ?? path.context; + final pubspecFile = File( + workingDirectory.isEmpty + ? pubspecYaml + : pathResolver.join(workingDirectory, pubspecYaml), + ); + + final content = await pubspecFile.readAsString(); + return Pubspec.parse(content); +} diff --git a/bricks/dart_frog_prod_server/hooks/lib/src/get_pubspec_lock.dart b/bricks/dart_frog_prod_server/hooks/lib/src/get_pubspec_lock.dart deleted file mode 100644 index 25d2d821b..000000000 --- a/bricks/dart_frog_prod_server/hooks/lib/src/get_pubspec_lock.dart +++ /dev/null @@ -1,19 +0,0 @@ -import 'dart:io'; - -import 'package:dart_frog_prod_server_hooks/src/pubspec_lock/pubspec_lock.dart'; -import 'package:path/path.dart' as path; - -Future getPubspecLock( - String workingDirectory, { - path.Context? pathContext, -}) async { - final pathResolver = pathContext ?? path.context; - final pubspecLockFile = File( - workingDirectory.isEmpty - ? 'pubspec.lock' - : pathResolver.join(workingDirectory, 'pubspec.lock'), - ); - - final content = await pubspecLockFile.readAsString(); - return PubspecLock.fromString(content); -} diff --git a/bricks/dart_frog_prod_server/hooks/lib/src/pubspec_lock/pubspec_lock.dart b/bricks/dart_frog_prod_server/hooks/lib/src/pubspec_lock/pubspec_lock.dart deleted file mode 100644 index 942926e06..000000000 --- a/bricks/dart_frog_prod_server/hooks/lib/src/pubspec_lock/pubspec_lock.dart +++ /dev/null @@ -1,232 +0,0 @@ -import 'dart:collection'; - -import 'package:equatable/equatable.dart'; -import 'package:yaml/yaml.dart'; - -/// {@template pubspec_lock_parse_exception} -/// Thrown when a [PubspecLock] fails to parse. -/// {@endtemplate} -class PubspecLockParseException implements Exception { - /// {@macro pubspec_lock_parse_exception} - const PubspecLockParseException(); -} - -/// A representation of a pubspec.lock file. -class PubspecLock { - const PubspecLock._({ - required this.packages, - }); - - /// Parses a [PubspecLock] from a string. - /// - /// If no packages are found, an empty [PubspecLock] is returned. Those - /// packages entries that cannot be parsed are ignored. - /// - /// It throws a [PubspecLockParseException] if the string cannot be parsed - /// as a [YamlMap]. - factory PubspecLock.fromString(String content) { - late final YamlMap yaml; - try { - yaml = loadYaml(content) as YamlMap; - // ignoring for backward compatibility - // ignore: avoid_catches_without_on_clauses - } catch (_) { - throw const PubspecLockParseException(); - } - - if (!yaml.containsKey('packages')) { - return PubspecLock.empty; - } - - final packages = yaml['packages'] as YamlMap; - - final parsedPackages = []; - for (final entry in packages.entries) { - try { - final package = PubspecLockPackage.fromYamlMap( - name: entry.key as String, - data: entry.value as YamlMap, - ); - parsedPackages.add(package); - // ignoring for backward compatibility - // ignore: avoid_catches_without_on_clauses - } catch (_) { - // Ignore those packages that for some reason cannot be parsed. - } - } - - return PubspecLock._( - packages: UnmodifiableListView(parsedPackages), - ); - } - - /// An empty [PubspecLock]. - static PubspecLock empty = PubspecLock._( - packages: UnmodifiableListView([]), - ); - - /// All the dependencies in the pubspec.lock file. - final UnmodifiableListView packages; -} - -/// {@template pubspec_lock_dependency} -/// A representation of a dependency in a pubspec.lock file. -/// {@endtemplate} -class PubspecLockPackage extends Equatable { - /// {@macro pubspec_lock_dependency} - const PubspecLockPackage({ - required this.name, - required this.type, - this.pathDescription, - }); - - /// Parses a [PubspecLockPackage] from a [YamlMap]. - factory PubspecLockPackage.fromYamlMap({ - required String name, - required YamlMap data, - }) { - final dependency = data['dependency'] as String; - final dependencyType = PubspecLockPackageDependencyType.parse(dependency); - - final description = data['description'] as YamlMap?; - final pathDescription = description != null - ? PubspecPackagePathDescription.tryParse(description) - : null; - - return PubspecLockPackage( - name: name, - type: dependencyType, - pathDescription: pathDescription, - ); - } - - /// The name of the dependency. - final String name; - - /// {@macro pubspec_lock_dependency_type} - final PubspecLockPackageDependencyType type; - - /// {@macro pubspec_package_path_description} - final PubspecPackagePathDescription? pathDescription; - - @override - List get props => [name, type, pathDescription]; -} - -/// {@template pubspec_lock_dependency_type} -/// The type of a [PubspecLockPackage]. -/// {@endtemplate} -enum PubspecLockPackageDependencyType { - /// Another package that your package needs to work. - /// - /// See also: - /// - /// * [Dart's dependency documentation](https://dart.dev/tools/pub/dependencies) - directMain._('direct main'), - - /// Another package that your package needs during development. - /// - /// See also: - /// - /// * [Dart's developer dependency documentation](https://dart.dev/tools/pub/dependencies#dev-dependencies) - directDev._('direct dev'), - - /// A dependency that your package indirectly uses because one of its - /// dependencies requires it. - /// - /// See also: - /// - /// * [Dart's transitive dependency documentation](https://dart.dev/tools/pub/glossary#transitive-) - transitive._('transitive'), - - /// A dependency that your package overrides that is not already a - /// `direct main` or `direct dev` dependency. - /// - /// See also: - /// - /// * [Dart's dependency override documentation](https://dart.dev/tools/pub/dependencies#dependency-overrides) - directOverridden._('direct overridden'); - - const PubspecLockPackageDependencyType._(this.value); - - /// Parses a [PubspecLockPackageDependencyType] from a string. - /// - /// Throws an [ArgumentError] if the string is not a valid dependency type. - factory PubspecLockPackageDependencyType.parse(String value) { - if (_valueMap.containsKey(value)) { - return _valueMap[value]!; - } - - throw ArgumentError.value( - value, - 'value', - 'Invalid PubspecLockPackageDependencyType value.', - ); - } - - static Map _valueMap = { - for (final type in PubspecLockPackageDependencyType.values) - type.value: type, - }; - - /// The string representation of the [PubspecLockPackageDependencyType] - /// as it appears in a pubspec.lock file. - final String value; -} - -/// {@template pubspec_package_path_description} -/// The description of a path dependency in a pubspec.lock file. -/// -/// For example, in: -/// ```yaml -/// my_package: -/// dependency: "direct main" -/// description: -/// path: "packages/my_package" -/// relative: true -/// source: path -/// version: "1.0.0+1" -/// ``` -/// -/// The description is: -/// ```yaml -/// path: "packages/my_package" -/// relative: true -/// ``` -/// -/// See also: -/// -/// * [PubspecPackagePathDescription.tryParse], which attempts to parses a -/// [YamlMap] into a [PubspecPackagePathDescription]. -/// {@endtemplate} -class PubspecPackagePathDescription extends Equatable { - const PubspecPackagePathDescription({ - required this.path, - required this.relative, - }); - - /// Attempts to parse a [YamlMap] into a [PubspecPackagePathDescription]. - /// - /// Returns `null` if the [YamlMap] does not contain the required data - /// to create a [PubspecPackagePathDescription]. - static PubspecPackagePathDescription? tryParse(YamlMap data) { - if ((!data.containsKey('path') || data['path'] is! String) || - (!data.containsKey('relative') || data['relative'] is! bool)) { - return null; - } - - final path = data['path'] as String; - final relative = data['relative'] as bool; - - return PubspecPackagePathDescription( - path: path, - relative: relative, - ); - } - - final String path; - final bool relative; - - @override - List get props => [path, relative]; -} diff --git a/bricks/dart_frog_prod_server/hooks/lib/src/uses_workspace_resolution.dart b/bricks/dart_frog_prod_server/hooks/lib/src/uses_workspace_resolution.dart new file mode 100644 index 000000000..db8aee704 --- /dev/null +++ b/bricks/dart_frog_prod_server/hooks/lib/src/uses_workspace_resolution.dart @@ -0,0 +1,26 @@ +import 'dart:io'; +import 'package:mason/mason.dart'; +import 'package:path/path.dart' as path; +import 'package:pubspec_parse/pubspec_parse.dart'; + +/// Determines whether the project in the provided [workingDirectory] +/// is configured to use `resolution: workspace`. +bool usesWorkspaceResolution( + HookContext context, { + required String workingDirectory, + required void Function(int exitCode) exit, +}) { + final pubspecFile = File(path.join(workingDirectory, 'pubspec.yaml')); + if (!pubspecFile.existsSync()) return false; + + final Pubspec pubspec; + try { + pubspec = Pubspec.parse(pubspecFile.readAsStringSync()); + } on Exception catch (e) { + context.logger.err('$e'); + exit(1); + return false; + } + + return pubspec.resolution == 'workspace'; +} diff --git a/bricks/dart_frog_prod_server/hooks/post_gen.dart b/bricks/dart_frog_prod_server/hooks/post_gen.dart index a563a85fb..c56980bcc 100644 --- a/bricks/dart_frog_prod_server/hooks/post_gen.dart +++ b/bricks/dart_frog_prod_server/hooks/post_gen.dart @@ -5,15 +5,13 @@ import 'package:dart_frog_prod_server_hooks/dart_frog_prod_server_hooks.dart'; import 'package:mason/mason.dart' show HookContext, lightCyan; import 'package:path/path.dart' as path; -void _defaultExit(int code) => ExitOverrides.current?.exit ?? io.exit; - Future run(HookContext context) => postGen(context); Future postGen( HookContext context, { io.Directory? directory, ProcessRunner runProcess = io.Process.run, - void Function(int exitCode) exit = _defaultExit, + void Function(int exitCode) exit = defaultExit, }) async { final projectDirectory = directory ?? io.Directory.current; final buildDirectoryPath = path.join(projectDirectory.path, 'build'); diff --git a/bricks/dart_frog_prod_server/hooks/pre_gen.dart b/bricks/dart_frog_prod_server/hooks/pre_gen.dart index 4e8caf88f..ea5d43df1 100644 --- a/bricks/dart_frog_prod_server/hooks/pre_gen.dart +++ b/bricks/dart_frog_prod_server/hooks/pre_gen.dart @@ -12,8 +12,6 @@ typedef RouteConfigurationBuilder = RouteConfiguration Function( io.Directory directory, ); -void _defaultExit(int code) => ExitOverrides.current?.exit ?? io.exit; - Future run(HookContext context) => preGen(context); Future preGen( @@ -21,23 +19,19 @@ Future preGen( io.Directory? directory, ProcessRunner runProcess = io.Process.run, RouteConfigurationBuilder buildConfiguration = buildRouteConfiguration, - void Function(int exitCode) exit = _defaultExit, + void Function(int exitCode) exit = defaultExit, Future Function(String from, String to) copyPath = io_expanded.copyPath, }) async { final projectDirectory = directory ?? io.Directory.current; - - // We need to make sure that the pubspec.lock file is up to date - await dartPubGet( + final buildDirectory = io.Directory( + path.join(projectDirectory.path, 'build'), + ); + final usesWorkspaces = usesWorkspaceResolution( context, workingDirectory: projectDirectory.path, - runProcess: runProcess, exit: exit, ); - final buildDirectory = io.Directory( - path.join(projectDirectory.path, 'build'), - ); - await createBundle( context: context, projectDirectory: projectDirectory, @@ -45,6 +39,24 @@ Future preGen( exit: exit, ); + if (usesWorkspaces) { + // Disable workspace resolution until we can generate per-package lockfiles. + // https://github.com/dart-lang/pub/issues/4594 + disableWorkspaceResolution( + context, + buildDirectory: buildDirectory.path, + exit: exit, + ); + // Copy the pubspec.lock from the workspace root to ensure the same versions + // of dependencies are used in the production build. + copyWorkspacePubspecLock( + context, + buildDirectory: buildDirectory.path, + workingDirectory: projectDirectory.path, + exit: exit, + ); + } + final RouteConfiguration configuration; try { configuration = buildConfiguration(projectDirectory); @@ -64,9 +76,7 @@ Future preGen( '''Route conflict detected. ${lightCyan.wrap(originalFilePath)} and ${lightCyan.wrap(conflictingFilePath)} both resolve to ${lightCyan.wrap(conflictingEndpoint)}.''', ); }, - onViolationEnd: () { - exit(1); - }, + onViolationEnd: () => exit(1), ); reportRogueRoutes( @@ -76,9 +86,7 @@ Future preGen( '''Rogue route detected.${defaultForeground.wrap(' ')}Rename ${lightCyan.wrap(filePath)} to ${lightCyan.wrap(idealPath)}.''', ); }, - onViolationEnd: () { - exit(1); - }, + onViolationEnd: () => exit(1), ); final customDockerFile = io.File( diff --git a/bricks/dart_frog_prod_server/hooks/pubspec.yaml b/bricks/dart_frog_prod_server/hooks/pubspec.yaml index b51f41634..68ea1c229 100644 --- a/bricks/dart_frog_prod_server/hooks/pubspec.yaml +++ b/bricks/dart_frog_prod_server/hooks/pubspec.yaml @@ -10,6 +10,7 @@ dependencies: io: ^1.0.3 mason: ^0.1.0 path: ^1.8.1 + pubspec_parse: ^1.5.0 yaml: ^3.1.2 dev_dependencies: diff --git a/bricks/dart_frog_prod_server/hooks/test/post_gen_test.dart b/bricks/dart_frog_prod_server/hooks/test/post_gen_test.dart index d1a44979c..714556989 100644 --- a/bricks/dart_frog_prod_server/hooks/test/post_gen_test.dart +++ b/bricks/dart_frog_prod_server/hooks/test/post_gen_test.dart @@ -54,7 +54,6 @@ void main() { expect( ExitOverrides.runZoned( () => post_gen.run(_FakeHookContext(logger: logger)), - exit: (_) {}, ), completes, ); diff --git a/bricks/dart_frog_prod_server/hooks/test/pre_gen_test.dart b/bricks/dart_frog_prod_server/hooks/test/pre_gen_test.dart index 3b3e449c8..238a6960d 100644 --- a/bricks/dart_frog_prod_server/hooks/test/pre_gen_test.dart +++ b/bricks/dart_frog_prod_server/hooks/test/pre_gen_test.dart @@ -9,7 +9,7 @@ import 'package:path/path.dart' as path; import 'package:test/test.dart'; import '../pre_gen.dart' as pre_gen; -import 'pubspec_locks.dart'; +import 'pubspecs.dart'; class _FakeHookContext extends Fake implements HookContext { _FakeHookContext({Logger? logger}) : _logger = logger ?? _MockLogger(); @@ -161,49 +161,65 @@ void main() { expect(exitCalls, equals([1])); }); - test( - 'works with external dependencies', - () async { - const configuration = RouteConfiguration( - middleware: [], - directories: [], - routes: [], - rogueRoutes: [], - endpoints: {}, - ); + test('works with workspaces', () async { + const configuration = RouteConfiguration( + middleware: [], + directories: [], + routes: [], + rogueRoutes: [], + endpoints: {}, + ); - final directory = Directory.systemTemp.createTempSync(); - File(path.join(directory.path, 'pubspec.yaml')).writeAsStringSync( - ''' -name: example -version: 0.1.0 -environment: - sdk: ^2.17.0 -dependencies: - mason: any - foo: - path: ../../foo -dev_dependencies: - test: any -''', - ); - File(path.join(directory.path, 'pubspec.lock')).writeAsStringSync( - fooPath, - ); - final exitCalls = []; - await pre_gen.preGen( - context, - buildConfiguration: (_) => configuration, - exit: exitCalls.add, - directory: directory, - runProcess: successRunProcess, - copyPath: (_, __) async {}, - ); + final directory = Directory.systemTemp.createTempSync(); + File( + path.join(directory.path, 'pubspec.yaml'), + ).writeAsStringSync(workspaceRoot); + final server = Directory( + path.join(directory.path, 'server'), + )..createSync(); + File( + path.join(server.path, 'pubspec.yaml'), + ).writeAsStringSync(workspaceChild); + final exitCalls = []; + await pre_gen.preGen( + context, + buildConfiguration: (_) => configuration, + exit: exitCalls.add, + directory: server, + runProcess: successRunProcess, + copyPath: (_, __) async {}, + ); - expect(exitCalls, isEmpty); - directory.delete(recursive: true).ignore(); - }, - ); + expect(exitCalls, isEmpty); + directory.delete(recursive: true).ignore(); + }); + + test('works with external dependencies', () async { + const configuration = RouteConfiguration( + middleware: [], + directories: [], + routes: [], + rogueRoutes: [], + endpoints: {}, + ); + + final directory = Directory.systemTemp.createTempSync(); + File( + path.join(directory.path, 'pubspec.yaml'), + ).writeAsStringSync(fooPath); + final exitCalls = []; + await pre_gen.preGen( + context, + buildConfiguration: (_) => configuration, + exit: exitCalls.add, + directory: directory, + runProcess: successRunProcess, + copyPath: (_, __) async {}, + ); + + expect(exitCalls, isEmpty); + directory.delete(recursive: true).ignore(); + }); test('retains invokeCustomEntrypoint (true)', () async { const configuration = RouteConfiguration( diff --git a/bricks/dart_frog_prod_server/hooks/test/pubspec_locks.dart b/bricks/dart_frog_prod_server/hooks/test/pubspec_locks.dart deleted file mode 100644 index c78d25653..000000000 --- a/bricks/dart_frog_prod_server/hooks/test/pubspec_locks.dart +++ /dev/null @@ -1,149 +0,0 @@ -/// An artificially crafted `pubspec.lock` file with: -/// -/// * A transitive dependency. -/// * A direct main path dependency that is not a child of the project -/// directory. -/// * A direct main path dependency that is not a child of the project -/// directory and has a different package name than the directory name. -/// * A direct main dependency that is hosted. -/// * A direct dev main dependency that is hosted. -/// * A direct overridden dependency from git. -const fooPath = ''' -packages: - args: - dependency: transitive - description: - name: args - sha256: eef6c46b622e0494a36c5a12d10d77fb4e855501a91c1b9ef9339326e58f0596 - url: "https://pub.dev" - source: hosted - version: "2.4.2" - foo: - dependency: "direct main" - description: - path: "../../foo" - relative: true - source: path - version: "0.0.0" - second_foo: - dependency: "direct main" - description: - path: "../../foo2" - relative: true - source: path - version: "0.0.0" - direct_main: - dependency: "direct main" - description: - name: direct_main - sha256: fdc9ea905e7c690fe39d2f9946b7aead86fd976f8edf97d2521a65d260bbf509 - url: "https://pub.dev" - source: hosted - version: "0.1.0-dev.50" - test: - dependency: "direct dev" - description: - name: test - sha256: "9b0dd8e36af4a5b1569029949d50a52cb2a2a2fdaa20cebb96e6603b9ae241f9" - url: "https://pub.dev" - source: hosted - version: "1.24.6" - direct_overridden: - dependency: "direct overridden" - description: - path: "packages/mason" - ref: "72c306a8d8abf306b5d024f95aac29ba5fd96577" - resolved-ref: "72c306a8d8abf306b5d024f95aac29ba5fd96577" - url: "https://github.com/alestiago/mason" - source: git - version: "0.1.0-dev.52" -sdks: - dart: ">=3.0.0 <4.0.0" -'''; - -/// An artificially crafted `pubspec.lock` file with: -/// -/// * A transitive dependency. -/// * A direct main path dependency that is not a child of the project -/// directory. -/// * A direct main path dependency that is a child of the project directory. -/// * A direct main dependency that is hosted. -/// * A direct dev main dependency that is hosted. -const fooPathWithInternalDependency = ''' -packages: - args: - dependency: transitive - description: - name: args - sha256: eef6c46b622e0494a36c5a12d10d77fb4e855501a91c1b9ef9339326e58f0596 - url: "https://pub.dev" - source: hosted - version: "2.4.2" - foo: - dependency: "direct main" - description: - path: "../../foo" - relative: true - source: path - version: "0.0.0" - bar: - dependency: "direct main" - description: - path: "packages/bar" - relative: true - source: path - version: "0.0.0" - mason: - dependency: "direct main" - description: - name: mason - sha256: fdc9ea905e7c690fe39d2f9946b7aead86fd976f8edf97d2521a65d260bbf509 - url: "https://pub.dev" - source: hosted - version: "0.1.0-dev.50" - test: - dependency: "direct dev" - description: - name: test - sha256: "9b0dd8e36af4a5b1569029949d50a52cb2a2a2fdaa20cebb96e6603b9ae241f9" - url: "https://pub.dev" - source: hosted - version: "1.24.6" -sdks: - dart: ">=3.0.0 <4.0.0" -'''; - -/// An artificially crafted `pubspec.lock` file with: -/// -/// * A transitive dependency. -/// * A direct main dependency that is hosted. -/// * A direct dev main dependency that is hosted. -const noPathDependencies = ''' -packages: - args: - dependency: transitive - description: - name: args - sha256: eef6c46b622e0494a36c5a12d10d77fb4e855501a91c1b9ef9339326e58f0596 - url: "https://pub.dev" - source: hosted - version: "2.4.2" - mason: - dependency: "direct main" - description: - name: mason - sha256: fdc9ea905e7c690fe39d2f9946b7aead86fd976f8edf97d2521a65d260bbf509 - url: "https://pub.dev" - source: hosted - version: "0.1.0-dev.50" - test: - dependency: "direct dev" - description: - name: test - sha256: "9b0dd8e36af4a5b1569029949d50a52cb2a2a2fdaa20cebb96e6603b9ae241f9" - url: "https://pub.dev" - source: hosted - version: "1.24.6" -sdks: - dart: ">=3.0.0 <4.0.0" -'''; diff --git a/bricks/dart_frog_prod_server/hooks/test/pubspecs.dart b/bricks/dart_frog_prod_server/hooks/test/pubspecs.dart new file mode 100644 index 000000000..1c75909ba --- /dev/null +++ b/bricks/dart_frog_prod_server/hooks/test/pubspecs.dart @@ -0,0 +1,78 @@ +/// An artificially crafted `pubspec.yaml` file with: +/// +/// * A direct main path dependency that is not a child of the project +/// directory. +/// * A direct main path dependency that is not a child of the project +/// directory and has a different package name than the directory name. +/// * A direct main dependency that is hosted. +/// * A direct dev main dependency that is hosted. +/// * A direct overridden dependency from git. +const fooPath = ''' +name: _ +dependencies: + foo: + path: ../../foo + foo2: + path: ../../foo2 + direct_main: ^0.1.0-dev.50 +dev_dependencies: + test: ^1.0.0 +dependency_overrides: + direct_overridden: + git: + url: https://github.com/alestiago/mason + path: packages/mason + ref: 72c306a8d8abf306b5d024f95aac29ba5fd96577 +'''; + +/// An artificially crafted `pubspec.yaml` file with: +/// +/// * A direct main path dependency that is not a child of the project +/// directory. +/// * A direct main path dependency that is a child of the project directory. +/// * A direct main dependency that is hosted. +/// * A direct dev main dependency that is hosted. +const fooPathWithInternalDependency = ''' +name: _ +dependencies: + foo: + path: ../../foo + bar: + path: packages/bar + mason: ^0.1.0-dev.50 +dev_dependencies: + test: ^1.0.0 +'''; + +/// An artificially crafted `pubspec.yaml` file with: +/// +/// * A direct main dependency that is hosted. +/// * A direct dev main dependency that is hosted. +const noPathDependencies = ''' +name: _ +dependencies: + mason: ^0.1.0-dev.50 +dev_dependencies: + test: ^1.0.0 +'''; + +/// An artificially crafted `pubspec.yaml` file with: +/// +/// * A direct main path dependency that is a child of the project directory. +/// * Dart workspaces enabled +const workspaceRoot = ''' +name: _ +dependencies: + server: + path: packages/server +workspace: + - packages/server +'''; + +/// An artificially crafted `pubspec.yaml` file with: +/// +/// * Dart workspaces enabled +const workspaceChild = ''' +name: server +resolution: workspace +'''; diff --git a/bricks/dart_frog_prod_server/hooks/test/src/copy_workspace_pubspec_lock_test.dart b/bricks/dart_frog_prod_server/hooks/test/src/copy_workspace_pubspec_lock_test.dart new file mode 100644 index 000000000..c47f7a99f --- /dev/null +++ b/bricks/dart_frog_prod_server/hooks/test/src/copy_workspace_pubspec_lock_test.dart @@ -0,0 +1,160 @@ +import 'dart:io'; + +import 'package:dart_frog_prod_server_hooks/dart_frog_prod_server_hooks.dart'; +import 'package:mason/mason.dart'; +import 'package:mocktail/mocktail.dart'; +import 'package:path/path.dart' as path; +import 'package:test/test.dart'; + +class _MockHookContext extends Mock implements HookContext {} + +class _MockLogger extends Mock implements Logger {} + +void main() { + group('copyWorkspacePubspecLock', () { + late List exitCalls; + late HookContext context; + late Logger logger; + late Directory buildDirectory; + late Directory workingDirectory; + + setUp(() { + exitCalls = []; + context = _MockHookContext(); + logger = _MockLogger(); + buildDirectory = Directory.systemTemp.createTempSync('build'); + workingDirectory = Directory.systemTemp.createTempSync('working'); + + when(() => context.logger).thenReturn(logger); + + addTearDown(() { + buildDirectory.delete().ignore(); + workingDirectory.delete().ignore(); + }); + }); + + test('exits with error when unable to determine the workspace root', () { + copyWorkspacePubspecLock( + context, + buildDirectory: buildDirectory.path, + workingDirectory: workingDirectory.path, + exit: exitCalls.add, + ); + expect(exitCalls, equals([1])); + verify( + () => logger.err( + 'Unable to determine workspace root for ${workingDirectory.path}', + ), + ); + }); + + test('exits with error when unable to parse pubspec.yaml', () { + File(path.join(workingDirectory.path, 'pubspec.yaml')) + .writeAsStringSync('invalid pubspec.yaml'); + copyWorkspacePubspecLock( + context, + buildDirectory: buildDirectory.path, + workingDirectory: workingDirectory.path, + exit: exitCalls.add, + ); + expect(exitCalls, equals([1])); + verify( + () => logger.err( + 'Unable to determine workspace root for ${workingDirectory.path}', + ), + ); + }); + + test('does nothing when pubspec.lock does not exist in workspace root', () { + File(path.join(workingDirectory.path, 'pubspec.yaml')) + .writeAsStringSync(''' +name: _ +version: 0.0.0 +environment: + sdk: ^3.8.0 +workspace: + - packages/hello_world +'''); + copyWorkspacePubspecLock( + context, + buildDirectory: buildDirectory.path, + workingDirectory: workingDirectory.path, + exit: exitCalls.add, + ); + expect(exitCalls, isEmpty); + verifyNever(() => logger.err(any())); + expect(buildDirectory.listSync(), isEmpty); + }); + + test('exits with error when unable to copy lockfile', () { + const pubspecLockContents = ''' +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: +'''; + File(path.join(workingDirectory.path, 'pubspec.yaml')) + .writeAsStringSync(''' +name: _ +version: 0.0.0 +environment: + sdk: ^3.8.0 +workspace: + - packages/hello_world +'''); + final file = File(path.join(workingDirectory.path, 'pubspec.lock')) + ..writeAsStringSync(pubspecLockContents); + Process.runSync('chmod', ['000', file.path]); + copyWorkspacePubspecLock( + context, + buildDirectory: buildDirectory.path, + workingDirectory: workingDirectory.path, + exit: exitCalls.add, + ); + expect(exitCalls, equals([1])); + verify( + () => logger.err(any(that: contains('Permission denied'))), + ); + }); + + test('copies pubspec.lock to build directory when found', () { + const pubspecLockContents = ''' +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: +'''; + File(path.join(workingDirectory.path, 'pubspec.yaml')) + .writeAsStringSync(''' +name: _ +version: 0.0.0 +environment: + sdk: ^3.8.0 +workspace: + - packages/hello_world +'''); + File(path.join(workingDirectory.path, 'pubspec.lock')) + .writeAsStringSync(pubspecLockContents); + copyWorkspacePubspecLock( + context, + buildDirectory: buildDirectory.path, + workingDirectory: workingDirectory.path, + exit: exitCalls.add, + ); + expect(exitCalls, isEmpty); + verifyNever(() => logger.err(any())); + final buildDirectoryContents = buildDirectory.listSync(); + expect(buildDirectoryContents, hasLength(1)); + expect( + buildDirectoryContents.first, + isA().having( + (f) => path.basename(f.path), + 'name', + 'pubspec.lock', + ), + ); + expect( + (buildDirectoryContents.first as File).readAsStringSync(), + equals(pubspecLockContents), + ); + }); + }); +} diff --git a/bricks/dart_frog_prod_server/hooks/test/src/create_external_packages_folder_test.dart b/bricks/dart_frog_prod_server/hooks/test/src/create_external_packages_folder_test.dart index 6cb836d5f..a57bead0c 100644 --- a/bricks/dart_frog_prod_server/hooks/test/src/create_external_packages_folder_test.dart +++ b/bricks/dart_frog_prod_server/hooks/test/src/create_external_packages_folder_test.dart @@ -4,77 +4,66 @@ import 'package:dart_frog_prod_server_hooks/dart_frog_prod_server_hooks.dart'; import 'package:path/path.dart' as path; import 'package:test/test.dart'; -import '../pubspec_locks.dart'; +import '../pubspecs.dart'; void main() { group('createExternalPackagesFolder', () { - test( - 'bundles external dependencies with external dependencies', - () async { - final projectDirectory = Directory.systemTemp.createTempSync(); - File(path.join(projectDirectory.path, 'pubspec.lock')) - .writeAsStringSync(fooPath); - final copyCalls = []; + test('bundles external dependencies with external dependencies', () async { + final projectDirectory = Directory.systemTemp.createTempSync(); + File(path.join(projectDirectory.path, 'pubspec.yaml')) + .writeAsStringSync(fooPath); + final copyCalls = []; - await createExternalPackagesFolder( - projectDirectory: projectDirectory, - buildDirectory: Directory(path.join(projectDirectory.path, 'build')), - copyPath: (from, to) { - copyCalls.add('$from -> $to'); - return Future.value(); - }, - ); + await createExternalPackagesFolder( + projectDirectory: projectDirectory, + buildDirectory: Directory(path.join(projectDirectory.path, 'build')), + copyPath: (from, to) async => copyCalls.add('$from -> $to'), + ); - final fooPackageDirectory = - path.join(projectDirectory.path, '../../foo'); - final fooPackageDirectoryTarget = path.join( - projectDirectory.path, - 'build', - '.dart_frog_path_dependencies', - 'foo', - ); + final fooPackageDirectory = path.join(projectDirectory.path, '../../foo'); + final fooPackageDirectoryTarget = path.join( + projectDirectory.path, + 'build', + '.dart_frog_path_dependencies', + 'foo', + ); - final secondFooPackageDirectory = - path.join(projectDirectory.path, '../../foo2'); - final secondFooPackageDirectoryTarget = path.join( - projectDirectory.path, - 'build', - '.dart_frog_path_dependencies', - 'second_foo', - ); - expect(copyCalls, [ - '$fooPackageDirectory -> $fooPackageDirectoryTarget', - '$secondFooPackageDirectory -> $secondFooPackageDirectoryTarget', - ]); - }, - ); + final foo2PackageDirectory = + path.join(projectDirectory.path, '../../foo2'); + final foo2PackageDirectoryTarget = path.join( + projectDirectory.path, + 'build', + '.dart_frog_path_dependencies', + 'foo2', + ); - test( - "don't bundle internal path dependencies", - () async { - final projectDirectory = Directory.systemTemp.createTempSync(); - File(path.join(projectDirectory.path, 'pubspec.lock')) - .writeAsStringSync(fooPathWithInternalDependency); - final copyCalls = []; + expect(copyCalls, [ + '$fooPackageDirectory -> $fooPackageDirectoryTarget', + '$foo2PackageDirectory -> $foo2PackageDirectoryTarget', + ]); + }); - await createExternalPackagesFolder( - projectDirectory: projectDirectory, - buildDirectory: Directory(path.join(projectDirectory.path, 'build')), - copyPath: (from, to) { - copyCalls.add('$from -> $to'); - return Future.value(); - }, - ); + test('does not bundle internal path dependencies', () async { + final projectDirectory = Directory.systemTemp.createTempSync(); + File( + path.join(projectDirectory.path, 'pubspec.yaml'), + ).writeAsStringSync(fooPathWithInternalDependency); + final copyCalls = []; - final from = path.join(projectDirectory.path, '../../foo'); - final to = path.join( - projectDirectory.path, - 'build', - '.dart_frog_path_dependencies', - 'foo', - ); - expect(copyCalls, ['$from -> $to']); - }, - ); + await createExternalPackagesFolder( + projectDirectory: projectDirectory, + buildDirectory: Directory(path.join(projectDirectory.path, 'build')), + copyPath: (from, to) async => copyCalls.add('$from -> $to'), + ); + + final from = path.join(projectDirectory.path, '../../foo'); + final to = path.join( + projectDirectory.path, + 'build', + '.dart_frog_path_dependencies', + 'foo', + ); + expect(copyCalls, ['$from -> $to']); + }); }); } diff --git a/bricks/dart_frog_prod_server/hooks/test/src/disable_workspace_resolution_test.dart b/bricks/dart_frog_prod_server/hooks/test/src/disable_workspace_resolution_test.dart new file mode 100644 index 000000000..0047b83e2 --- /dev/null +++ b/bricks/dart_frog_prod_server/hooks/test/src/disable_workspace_resolution_test.dart @@ -0,0 +1,98 @@ +import 'dart:io'; + +import 'package:dart_frog_prod_server_hooks/dart_frog_prod_server_hooks.dart'; +import 'package:mason/mason.dart'; +import 'package:mocktail/mocktail.dart'; +import 'package:path/path.dart' as path; +import 'package:test/test.dart'; + +class _MockHookContext extends Mock implements HookContext {} + +class _MockLogger extends Mock implements Logger {} + +void main() { + group('disableWorkspaceResolution', () { + late List exitCalls; + late HookContext context; + late Logger logger; + late Directory buildDirectory; + + setUp(() { + exitCalls = []; + context = _MockHookContext(); + logger = _MockLogger(); + buildDirectory = Directory.systemTemp.createTempSync('build'); + + when(() => context.logger).thenReturn(logger); + + addTearDown(() => buildDirectory.delete().ignore()); + }); + + group('when pubspec_overrides.yaml does not exist', () { + test('adds resolution: null', () { + disableWorkspaceResolution( + context, + buildDirectory: buildDirectory.path, + exit: exitCalls.add, + ); + final buildDirectoryContents = buildDirectory.listSync(); + expect(buildDirectoryContents, hasLength(1)); + final pubspecOverrides = buildDirectoryContents.first as File; + expect(pubspecOverrides.readAsStringSync(), equals(''' + +resolution: null +''')); + }); + }); + + group('when pubspec_overrides.yaml exists', () { + const originalPubspecOverridesContent = ''' +dependency_overrides: + foo: + path: ./path/to/foo'''; + + setUp(() { + File(path.join(buildDirectory.path, 'pubspec_overrides.yaml')) + .writeAsStringSync(originalPubspecOverridesContent); + }); + + test('adds resolution: null', () { + disableWorkspaceResolution( + context, + buildDirectory: buildDirectory.path, + exit: exitCalls.add, + ); + final buildDirectoryContents = buildDirectory.listSync(); + expect(buildDirectoryContents, hasLength(1)); + final pubspecOverrides = buildDirectoryContents.first as File; + expect(pubspecOverrides.readAsStringSync(), equals(''' +$originalPubspecOverridesContent +resolution: null +''')); + }); + }); + + group('when unable to read pubspec_overrides', () { + setUp(() { + final pubspecOverrides = File( + path.join(buildDirectory.path, 'pubspec_overrides.yaml'), + )..createSync(); + Process.runSync('chmod', ['000', pubspecOverrides.path]); + }); + + test('exits with error', () { + disableWorkspaceResolution( + context, + buildDirectory: buildDirectory.path, + exit: exitCalls.add, + ); + final buildDirectoryContents = buildDirectory.listSync(); + expect(buildDirectoryContents, hasLength(1)); + expect(exitCalls, equals([1])); + verify( + () => logger.err(any(that: contains('Permission denied'))), + ).called(1); + }); + }); + }); +} diff --git a/bricks/dart_frog_prod_server/hooks/test/src/get_internal_path_dependencies_test.dart b/bricks/dart_frog_prod_server/hooks/test/src/get_internal_path_dependencies_test.dart index 34dffe105..b7f39455e 100644 --- a/bricks/dart_frog_prod_server/hooks/test/src/get_internal_path_dependencies_test.dart +++ b/bricks/dart_frog_prod_server/hooks/test/src/get_internal_path_dependencies_test.dart @@ -8,25 +8,12 @@ void main() { group('getPathDependencies', () { test('returns nothing when there are no path dependencies', () { final directory = Directory.systemTemp.createTempSync(); - File(path.join(directory.path, 'pubspec.lock')).writeAsStringSync( + File(path.join(directory.path, 'pubspec.yaml')).writeAsStringSync( ''' -packages: - test: - dependency: transitive - description: - name: analyzer - sha256: f85566ec7b3d25cbea60f7dd4f157c5025f2f19233ca4feeed33b616c78a26a3 - url: "https://pub.dev" - source: hosted - version: "6.1.0" - mason: - dependency: transitive - description: - name: analyzer - sha256: f85566ec7b3d25cbea60f7dd4f157c5025f2f19233ca4feeed33b616c78a26a3 - url: "https://pub.dev" - source: hosted - version: "6.1.0" +name: _ +dependencies: + test: ^1.0.0 + mason: ^0.1.0 ''', ); expect(getInternalPathDependencies(directory), completion(isEmpty)); @@ -35,23 +22,14 @@ packages: test('returns correct path dependencies', () { final directory = Directory.systemTemp.createTempSync(); - File(path.join(directory.path, 'pubspec.lock')).writeAsStringSync( + File(path.join(directory.path, 'pubspec.yaml')).writeAsStringSync( ''' -packages: +name: _ +dependencies: dart_frog: - dependency: "direct main" - description: - path: "path/to/dart_frog" - relative: true - source: path - version: "0.0.0" + path: path/to/dart_frog dart_frog_gen: - dependency: "direct main" - description: - path: "path/to/dart_frog_gen" - relative: true - source: path - version: "0.0.0" + path: path/to/dart_frog_gen ''', ); expect( diff --git a/bricks/dart_frog_prod_server/hooks/test/src/pubspec_lock/pubspec_lock_test.dart b/bricks/dart_frog_prod_server/hooks/test/src/pubspec_lock/pubspec_lock_test.dart deleted file mode 100644 index 47a9c80f4..000000000 --- a/bricks/dart_frog_prod_server/hooks/test/src/pubspec_lock/pubspec_lock_test.dart +++ /dev/null @@ -1,318 +0,0 @@ -// ignoring for testing purposes -// ignore_for_file: prefer_const_constructors - -import 'package:dart_frog_prod_server_hooks/src/pubspec_lock/pubspec_lock.dart'; -import 'package:test/test.dart'; -import 'package:yaml/yaml.dart'; - -void main() { - group('$PubspecLock', () { - group('fromString', () { - test('parses correctly', () { - final pubspecLock = PubspecLock.fromString(_pubspecLockContent); - - expect( - pubspecLock.packages, - equals( - const [ - PubspecLockPackage( - name: 'very_good_test_runner', - type: PubspecLockPackageDependencyType.directMain, - ), - PubspecLockPackage( - name: 'very_good_analysis', - type: PubspecLockPackageDependencyType.directDev, - ), - PubspecLockPackage( - name: 'yaml', - type: PubspecLockPackageDependencyType.transitive, - ), - PubspecLockPackage( - name: 'path', - type: PubspecLockPackageDependencyType.directOverridden, - ), - PubspecLockPackage( - name: 'foo', - type: PubspecLockPackageDependencyType.directMain, - pathDescription: PubspecPackagePathDescription( - path: 'packages/foo', - relative: true, - ), - ), - PubspecLockPackage( - name: 'yaml2', - type: PubspecLockPackageDependencyType.transitive, - ), - ], - ), - ); - }); - - test('throws a $PubspecLockParseException when content is empty', () { - expect( - () => PubspecLock.fromString(''), - throwsA(isA()), - ); - }); - - test('returns empty PubspecLock when content has no packages entry', () { - final pubspecLock = PubspecLock.fromString(_emptyPubspecLockContent); - expect(pubspecLock.packages, isEmpty); - }); - }); - }); - - group('$PubspecLockPackage', () { - test('can be instantiated', () { - expect( - PubspecLockPackage( - name: 'foo', - type: PubspecLockPackageDependencyType.directMain, - ), - isA(), - ); - }); - - test('supports value equality', () { - final package1 = PubspecLockPackage( - name: 'foo', - type: PubspecLockPackageDependencyType.directMain, - ); - final package2 = PubspecLockPackage( - name: 'foo', - type: PubspecLockPackageDependencyType.directMain, - ); - final package3 = PubspecLockPackage( - name: 'bar', - type: PubspecLockPackageDependencyType.transitive, - ); - - expect(package1, equals(package2)); - expect(package1, isNot(equals(package3))); - expect(package2, isNot(equals(package3))); - }); - }); - - group('$PubspecLockPackageDependencyType', () { - group('parse', () { - test('parses successfully `direct main`', () { - expect( - PubspecLockPackageDependencyType.parse('direct main'), - equals(PubspecLockPackageDependencyType.directMain), - ); - }); - - test('parses successfully `direct dev`', () { - expect( - PubspecLockPackageDependencyType.parse('direct dev'), - equals(PubspecLockPackageDependencyType.directDev), - ); - }); - - test('parses successfully `direct overridden`', () { - expect( - PubspecLockPackageDependencyType.parse('direct overridden'), - equals(PubspecLockPackageDependencyType.directOverridden), - ); - }); - - test('parses successfully `transitive`', () { - expect( - PubspecLockPackageDependencyType.parse('transitive'), - equals(PubspecLockPackageDependencyType.transitive), - ); - }); - - test('throws a $ArgumentError when type is invalid', () { - expect( - () => PubspecLockPackageDependencyType.parse('invalid'), - throwsA(isA()), - ); - }); - }); - }); - - group('$PubspecPackagePathDescription', () { - test('can be instantiated', () { - expect( - PubspecPackagePathDescription( - path: 'packages/foo', - relative: true, - ), - isA(), - ); - }); - - test('supports value equality', () { - final description1 = PubspecPackagePathDescription( - path: 'packages/foo', - relative: true, - ); - final description2 = PubspecPackagePathDescription( - path: 'packages/foo', - relative: true, - ); - final description3 = PubspecPackagePathDescription( - path: 'packages/bar', - relative: true, - ); - final description4 = PubspecPackagePathDescription( - path: 'packages/foo', - relative: false, - ); - - expect(description1, equals(description2)); - expect(description1, isNot(equals(description3))); - expect(description1, isNot(equals(description4))); - expect(description3, isNot(equals(description4))); - }); - - group('tryParse', () { - test('parses', () { - final data = loadYaml( - ''' -path: "packages/foo" -relative: true - ''', - ) as YamlMap; - - final description = PubspecPackagePathDescription.tryParse(data); - - expect( - description, - equals( - PubspecPackagePathDescription( - path: 'packages/foo', - relative: true, - ), - ), - ); - }); - - group('returns null', () { - test('when missing "path"', () { - final data = loadYaml( - ''' -relative: true - ''', - ) as YamlMap; - - final description = PubspecPackagePathDescription.tryParse(data); - - expect(description, isNull); - }); - - test('when "path" is not a String', () { - final data = loadYaml( - ''' -path: 1 -relative: true - ''', - ) as YamlMap; - - final description = PubspecPackagePathDescription.tryParse(data); - - expect(description, isNull); - }); - - test('when missing "relative"', () { - final data = loadYaml( - ''' -path: "packages/foo" - ''', - ) as YamlMap; - - final description = PubspecPackagePathDescription.tryParse(data); - - expect(description, isNull); - }); - - test('when "relative" is not a bool', () { - final data = loadYaml( - ''' -path: "packages/foo" -relative: 5 - ''', - ) as YamlMap; - - final description = PubspecPackagePathDescription.tryParse(data); - - expect(description, isNull); - }); - }); - }); - }); -} - -/// An example pubspec.lock content used to test the [PubspecLock] class. -/// -/// It has been artificially crafted to include: -/// - one pub hosted direct main package entry -/// - one pub hosted direct dev package entry -/// - one pub hosted transitive package entry -/// - one pub hosted overridden package entry -/// - one path direct main package entry -/// - one not pub hosted transitive package entry -/// - one invalid package entry -const _pubspecLockContent = ''' -packages: - very_good_test_runner: - dependency: "direct main" - description: - name: very_good_test_runner - sha256: "4d41e5d7677d259b9a1599c78645ac2d36bc2bd6ff7773507bcb0bab41417fe2" - url: "https://pub.dev" - source: hosted - version: "0.1.2" - very_good_analysis: - dependency: "direct dev" - description: - name: very_good_analysis - sha256: "9ae7f3a3bd5764fb021b335ca28a34f040cd0ab6eec00a1b213b445dae58a4b8" - url: "https://pub.dev" - source: hosted - version: "5.1.0" - yaml: - dependency: transitive - description: - name: yaml - sha256: "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5" - url: "https://pub.dev" - source: hosted - version: "3.1.2" - path: - dependency: "direct overridden" - description: - name: path - sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" - url: "https://pub.dev" - source: hosted - version: "1.9.0" - foo: - dependency: "direct main" - description: - path: "packages/foo" - relative: true - source: path - version: "1.0.0+1" - yaml2: - dependency: transitive - description: - name: yaml - sha256: "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5" - url: "https://not-pub.dev" - source: hosted - version: "3.1.2" - bad_package: - not_dependency: "bad" -sdks: - dart: ">=3.1.0 <4.0.0" - -'''; - -/// A valid pubspec lock file with no packages. -const _emptyPubspecLockContent = ''' -sdks: - dart: ">=3.1.0 <4.0.0" - -'''; diff --git a/bricks/dart_frog_prod_server/hooks/test/src/uses_workspace_resolution_test.dart b/bricks/dart_frog_prod_server/hooks/test/src/uses_workspace_resolution_test.dart new file mode 100644 index 000000000..140104fac --- /dev/null +++ b/bricks/dart_frog_prod_server/hooks/test/src/uses_workspace_resolution_test.dart @@ -0,0 +1,117 @@ +import 'dart:io'; + +import 'package:dart_frog_prod_server_hooks/dart_frog_prod_server_hooks.dart'; +import 'package:mason/mason.dart'; +import 'package:mocktail/mocktail.dart'; +import 'package:path/path.dart' as path; +import 'package:test/test.dart'; + +class _MockHookContext extends Mock implements HookContext {} + +class _MockLogger extends Mock implements Logger {} + +void main() { + group('usesWorkspaceResolution', () { + late List exitCalls; + late HookContext context; + late Logger logger; + late Directory buildDirectory; + late Directory workingDirectory; + + setUp(() { + exitCalls = []; + context = _MockHookContext(); + logger = _MockLogger(); + buildDirectory = Directory.systemTemp.createTempSync('build'); + workingDirectory = Directory.systemTemp.createTempSync('working'); + + when(() => context.logger).thenReturn(logger); + + addTearDown(() { + buildDirectory.delete().ignore(); + workingDirectory.delete().ignore(); + }); + }); + + group('when pubspec.yaml does not exist', () { + test('returns false', () { + expect( + usesWorkspaceResolution( + context, + workingDirectory: workingDirectory.path, + exit: exitCalls.add, + ), + isFalse, + ); + }); + }); + + group('when pubspec.yaml is malformed', () { + setUp(() { + File( + path.join(workingDirectory.path, 'pubspec.yaml'), + ).writeAsStringSync('invalid pubspec.yaml'); + }); + + test('returns false', () { + expect( + usesWorkspaceResolution( + context, + workingDirectory: workingDirectory.path, + exit: exitCalls.add, + ), + isFalse, + ); + expect(exitCalls, equals([1])); + verify(() => logger.err(any(that: contains('ParsedYamlException')))); + }); + }); + + group('when pubspec.yaml is valid with no resolution', () { + setUp(() { + File( + path.join(workingDirectory.path, 'pubspec.yaml'), + ).writeAsStringSync(''' +name: _ +'''); + }); + + test('returns false', () { + expect( + usesWorkspaceResolution( + context, + workingDirectory: workingDirectory.path, + exit: exitCalls.add, + ), + isFalse, + ); + expect(exitCalls, isEmpty); + verifyNever(() => logger.err(any())); + }); + }); + + group('when pubspec.yaml is valid with resolution workspace', () { + setUp(() { + File( + path.join(workingDirectory.path, 'pubspec.yaml'), + ).writeAsStringSync(''' +name: _ +resolution: workspace +'''); + }); + + test('returns true', () { + expect( + usesWorkspaceResolution( + context, + workingDirectory: workingDirectory.path, + exit: exitCalls.add, + ), + isTrue, + ); + expect(exitCalls, isEmpty); + verifyNever(() => logger.err(any())); + }); + }); + }); +} diff --git a/packages/dart_frog_cli/lib/src/commands/build/templates/dart_frog_prod_server_bundle.dart b/packages/dart_frog_cli/lib/src/commands/build/templates/dart_frog_prod_server_bundle.dart index c24b4707f..0b31467f3 100644 --- a/packages/dart_frog_cli/lib/src/commands/build/templates/dart_frog_prod_server_bundle.dart +++ b/packages/dart_frog_cli/lib/src/commands/build/templates/dart_frog_prod_server_bundle.dart @@ -20,15 +20,165 @@ final dartFrogProdServerBundle = MasonBundle.fromJson({ { "path": "build/{{#addDockerfile}}Dockerfile{{/addDockerfile}}", "data": - "IyBPZmZpY2lhbCBEYXJ0IGltYWdlOiBodHRwczovL2h1Yi5kb2NrZXIuY29tL18vZGFydAojIFNwZWNpZnkgdGhlIERhcnQgU0RLIGJhc2UgaW1hZ2UgdmVyc2lvbiB1c2luZyBkYXJ0Ojx2ZXJzaW9uPiAoZXg6IGRhcnQ6Mi4xNykKRlJPTSBkYXJ0Ont7ZGFydFZlcnNpb259fSBBUyBidWlsZAoKV09SS0RJUiAvYXBwCnt7I2hhc0V4dGVybmFsRGVwZW5kZW5jaWVzfX0KCiMgQ29weSBleHRlcm5hbCBkZXBlbmRlbmNpZXMKQ09QWSAuLy5kYXJ0X2Zyb2dfcGF0aF9kZXBlbmRlbmNpZXMgIC4vLmRhcnRfZnJvZ19wYXRoX2RlcGVuZGVuY2llcwpDT1BZIC4vcHVic3BlY19vdmVycmlkZXMueWFtbCAuL3B1YnNwZWNfb3ZlcnJpZGVzLnlhbWwKe3svaGFzRXh0ZXJuYWxEZXBlbmRlbmNpZXN9fQojIENvcHkgRGVwZW5kZW5jaWVzCnt7I3BhdGhEZXBlbmRlbmNpZXN9fUNPUFkge3t7Ln19fSAuL3t7ey59fX0Ke3svcGF0aERlcGVuZGVuY2llc319Cnt7Xmhhc0V4dGVybmFsRGVwZW5kZW5jaWVzfX0KIyBJbnN0YWxsIERlcGVuZGVuY2llcwp7eyNwYXRoRGVwZW5kZW5jaWVzfX1SVU4gZGFydCBwdWIgZ2V0IC1DIHt7ey59fX0Ke3svcGF0aERlcGVuZGVuY2llc319Cnt7L2hhc0V4dGVybmFsRGVwZW5kZW5jaWVzfX0KIyBSZXNvbHZlIGFwcCBkZXBlbmRlbmNpZXMuCkNPUFkgcHVic3BlYy4qIC4vClJVTiBkYXJ0IHB1YiBnZXQKCiMgQ29weSBhcHAgc291cmNlIGNvZGUgYW5kIEFPVCBjb21waWxlIGl0LgpDT1BZIC4gLgojIEVuc3VyZSBwYWNrYWdlcyBhcmUgc3RpbGwgdXAtdG8tZGF0ZSBpZiBhbnl0aGluZyBoYXMgY2hhbmdlZApSVU4gZGFydCBwdWIgZ2V0IC0tb2ZmbGluZQpSVU4gZGFydCBjb21waWxlIGV4ZSBiaW4vc2VydmVyLmRhcnQgLW8gYmluL3NlcnZlcgoKIyBCdWlsZCBtaW5pbWFsIHNlcnZpbmcgaW1hZ2UgZnJvbSBBT1QtY29tcGlsZWQgYC9zZXJ2ZXJgIGFuZCByZXF1aXJlZCBzeXN0ZW0KIyBsaWJyYXJpZXMgYW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMgc3RvcmVkIGluIGAvcnVudGltZS9gIGZyb20gdGhlIGJ1aWxkIHN0YWdlLgpGUk9NIHNjcmF0Y2gKQ09QWSAtLWZyb209YnVpbGQgL3J1bnRpbWUvIC8KQ09QWSAtLWZyb209YnVpbGQgL2FwcC9iaW4vc2VydmVyIC9hcHAvYmluLwp7eyNzZXJ2ZVN0YXRpY0ZpbGVzfX1DT1BZIC0tZnJvbT1idWlsZCAvYXBwL3B1YmxpYyAvcHVibGljL3t7L3NlcnZlU3RhdGljRmlsZXN9fQoKIyBTdGFydCBzZXJ2ZXIuCkNNRCBbIi9hcHAvYmluL3NlcnZlciJdCg==", + "IyBPZmZpY2lhbCBEYXJ0IGltYWdlOiBodHRwczovL2h1Yi5kb2NrZXIuY29tL18vZGFydAojIFNwZWNpZnkgdGhlIERhcnQgU0RLIGJhc2UgaW1hZ2UgdmVyc2lvbiB1c2luZyBkYXJ0Ojx2ZXJzaW9uPiAoZXg6IGRhcnQ6Mi4xNykKRlJPTSBkYXJ0Ont7ZGFydFZlcnNpb259fSBBUyBidWlsZAoKV09SS0RJUiAvYXBwCnt7I2hhc0V4dGVybmFsRGVwZW5kZW5jaWVzfX0KCiMgQ29weSBleHRlcm5hbCBkZXBlbmRlbmNpZXMKQ09QWSAuLy5kYXJ0X2Zyb2dfcGF0aF9kZXBlbmRlbmNpZXMgIC4vLmRhcnRfZnJvZ19wYXRoX2RlcGVuZGVuY2llcwpDT1BZIC4vcHVic3BlY19vdmVycmlkZXMueWFtbCAuL3B1YnNwZWNfb3ZlcnJpZGVzLnlhbWwKe3svaGFzRXh0ZXJuYWxEZXBlbmRlbmNpZXN9fQojIENvcHkgRGVwZW5kZW5jaWVzCnt7I3BhdGhEZXBlbmRlbmNpZXN9fUNPUFkge3t7Ln19fSAuL3t7ey59fX0Ke3svcGF0aERlcGVuZGVuY2llc319Cnt7Xmhhc0V4dGVybmFsRGVwZW5kZW5jaWVzfX0KIyBJbnN0YWxsIERlcGVuZGVuY2llcwp7eyNwYXRoRGVwZW5kZW5jaWVzfX1SVU4gZGFydCBwdWIgZ2V0IC1DIHt7ey59fX0Ke3svcGF0aERlcGVuZGVuY2llc319Cnt7L2hhc0V4dGVybmFsRGVwZW5kZW5jaWVzfX0KIyBSZXNvbHZlIGFwcCBkZXBlbmRlbmNpZXMuCkNPUFkgcHVic3BlYy4qIC4vCkNPUFkgcHVic3BlY19vdmVycmlkZXMueWFtbCogLi8KUlVOIGRhcnQgcHViIGdldAoKIyBDb3B5IGFwcCBzb3VyY2UgY29kZSBhbmQgQU9UIGNvbXBpbGUgaXQuCkNPUFkgLiAuCiMgRW5zdXJlIHBhY2thZ2VzIGFyZSBzdGlsbCB1cC10by1kYXRlIGlmIGFueXRoaW5nIGhhcyBjaGFuZ2VkClJVTiBkYXJ0IHB1YiBnZXQgLS1vZmZsaW5lClJVTiBkYXJ0IGNvbXBpbGUgZXhlIGJpbi9zZXJ2ZXIuZGFydCAtbyBiaW4vc2VydmVyCgojIEJ1aWxkIG1pbmltYWwgc2VydmluZyBpbWFnZSBmcm9tIEFPVC1jb21waWxlZCBgL3NlcnZlcmAgYW5kIHJlcXVpcmVkIHN5c3RlbQojIGxpYnJhcmllcyBhbmQgY29uZmlndXJhdGlvbiBmaWxlcyBzdG9yZWQgaW4gYC9ydW50aW1lL2AgZnJvbSB0aGUgYnVpbGQgc3RhZ2UuCkZST00gc2NyYXRjaApDT1BZIC0tZnJvbT1idWlsZCAvcnVudGltZS8gLwpDT1BZIC0tZnJvbT1idWlsZCAvYXBwL2Jpbi9zZXJ2ZXIgL2FwcC9iaW4vCnt7I3NlcnZlU3RhdGljRmlsZXN9fUNPUFkgLS1mcm9tPWJ1aWxkIC9hcHAvcHVibGljIC9wdWJsaWMve3svc2VydmVTdGF0aWNGaWxlc319CgojIFN0YXJ0IHNlcnZlci4KQ01EIFsiL2FwcC9iaW4vc2VydmVyIl0K", "type": "text" } ], "hooks": [ + { + "path": "build/lib/dart_frog_prod_server_hooks.dart", + "data": + "ZXhwb3J0ICdzcmMvY29weV93b3Jrc3BhY2VfcHVic3BlY19sb2NrLmRhcnQnOwpleHBvcnQgJ3NyYy9jcmVhdGVfYnVuZGxlLmRhcnQnOwpleHBvcnQgJ3NyYy9jcmVhdGVfZXh0ZXJuYWxfcGFja2FnZXNfZm9sZGVyLmRhcnQnOwpleHBvcnQgJ3NyYy9kYXJ0X3B1Yl9nZXQuZGFydCc7CmV4cG9ydCAnc3JjL2Rpc2FibGVfd29ya3NwYWNlX3Jlc29sdXRpb24uZGFydCc7CmV4cG9ydCAnc3JjL2V4aXRfb3ZlcnJpZGVzLmRhcnQnOwpleHBvcnQgJ3NyYy9nZXRfaW50ZXJuYWxfcGF0aF9kZXBlbmRlbmNpZXMuZGFydCc7CmV4cG9ydCAnc3JjL2dldF9wdWJzcGVjLmRhcnQnOwpleHBvcnQgJ3NyYy91c2VzX3dvcmtzcGFjZV9yZXNvbHV0aW9uLmRhcnQnOwo=", + "type": "text" + }, + { + "path": "build/lib/src/copy_workspace_pubspec_lock.dart", + "data": + "aW1wb3J0ICdkYXJ0OmlvJzsKaW1wb3J0ICdwYWNrYWdlOm1hc29uL21hc29uLmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6cGF0aC9wYXRoLmRhcnQnIGFzIHBhdGg7CmltcG9ydCAncGFja2FnZTpwdWJzcGVjX3BhcnNlL3B1YnNwZWNfcGFyc2UuZGFydCc7CgovLy8gQ29waWVzIHRoZSBwdWJzcGVjLmxvY2sgZnJvbSB0aGUgd29ya3NwYWNlIHJvb3QgaW50byB0aGUgYnVpbGQgZGlyZWN0b3J5Ci8vLyBpbiBvcmRlciB0byBlbnN1cmUgdGhlIHByb2R1Y3Rpb24gYnVpbGQgdXNlcyB0aGUgZXhhY3Qgc2FtZSB2ZXJzaW9ucyBvZiBhbGwKLy8vIGRlcGVuZGVuY2llcy4Kdm9pZCBjb3B5V29ya3NwYWNlUHVic3BlY0xvY2soCiAgSG9va0NvbnRleHQgY29udGV4dCwgewogIHJlcXVpcmVkIFN0cmluZyBidWlsZERpcmVjdG9yeSwKICByZXF1aXJlZCBTdHJpbmcgd29ya2luZ0RpcmVjdG9yeSwKICByZXF1aXJlZCB2b2lkIEZ1bmN0aW9uKGludCBleGl0Q29kZSkgZXhpdCwKfSkgewogIGZpbmFsIHdvcmtzcGFjZVJvb3QgPSBfZ2V0V29ya3NwYWNlUm9vdCh3b3JraW5nRGlyZWN0b3J5KTsKICBpZiAod29ya3NwYWNlUm9vdCA9PSBudWxsKSB7CiAgICBjb250ZXh0LmxvZ2dlci5lcnIoCiAgICAgICdVbmFibGUgdG8gZGV0ZXJtaW5lIHdvcmtzcGFjZSByb290IGZvciAkd29ya2luZ0RpcmVjdG9yeScsCiAgICApOwogICAgcmV0dXJuIGV4aXQoMSk7CiAgfQogIGZpbmFsIHB1YnNwZWNMb2NrRmlsZSA9IEZpbGUocGF0aC5qb2luKHdvcmtzcGFjZVJvb3QucGF0aCwgJ3B1YnNwZWMubG9jaycpKTsKICBpZiAoIXB1YnNwZWNMb2NrRmlsZS5leGlzdHNTeW5jKCkpIHJldHVybjsKCiAgdHJ5IHsKICAgIHB1YnNwZWNMb2NrRmlsZS5jb3B5U3luYyhwYXRoLmpvaW4oYnVpbGREaXJlY3RvcnksICdwdWJzcGVjLmxvY2snKSk7CiAgfSBvbiBFeGNlcHRpb24gY2F0Y2ggKGVycm9yKSB7CiAgICBjb250ZXh0LmxvZ2dlci5lcnIoJyRlcnJvcicpOwogICAgcmV0dXJuIGV4aXQoMSk7CiAgfQp9CgovLy8gUmV0dXJucyB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhlIG5lYXJlc3QgRGFydCB3b3Jrc3BhY2UuCkRpcmVjdG9yeT8gX2dldFdvcmtzcGFjZVJvb3QoU3RyaW5nIHdvcmtpbmdEaXJlY3RvcnkpIHsKICBmaW5hbCBmaWxlID0gX2ZpbmROZWFyZXN0QW5jZXN0b3IoCiAgICB3aGVyZTogKHBhdGgpID0+IF9nZXRXb3Jrc3BhY2VSb290UHVic3BlY1lhbWwoY3dkOiBEaXJlY3RvcnkocGF0aCkpLAogICAgY3dkOiBEaXJlY3Rvcnkod29ya2luZ0RpcmVjdG9yeSksCiAgKTsKICBpZiAoZmlsZSA9PSBudWxsIHx8ICFmaWxlLmV4aXN0c1N5bmMoKSkgcmV0dXJuIG51bGw7CiAgcmV0dXJuIERpcmVjdG9yeShwYXRoLmRpcm5hbWUoZmlsZS5wYXRoKSk7Cn0KCi8vLyBUaGUgd29ya3NwYWNlIHJvb3QgYHB1YnNwZWMueWFtbGAgZmlsZSBmb3IgdGhpcyBwcm9qZWN0LgpGaWxlPyBfZ2V0V29ya3NwYWNlUm9vdFB1YnNwZWNZYW1sKHtyZXF1aXJlZCBEaXJlY3RvcnkgY3dkfSkgewogIHRyeSB7CiAgICBmaW5hbCBwdWJzcGVjWWFtbEZpbGUgPSBGaWxlKHBhdGguam9pbihjd2QucGF0aCwgJ3B1YnNwZWMueWFtbCcpKTsKICAgIGlmICghcHVic3BlY1lhbWxGaWxlLmV4aXN0c1N5bmMoKSkgcmV0dXJuIG51bGw7CiAgICBmaW5hbCBwdWJzcGVjID0gUHVic3BlYy5wYXJzZShwdWJzcGVjWWFtbEZpbGUucmVhZEFzU3RyaW5nU3luYygpKTsKICAgIGlmIChwdWJzcGVjLndvcmtzcGFjZT8uaXNFbXB0eSA/PyB0cnVlKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBwdWJzcGVjWWFtbEZpbGU7CiAgfSBvbiBFeGNlcHRpb24gewogICAgcmV0dXJuIG51bGw7CiAgfQp9CgovLy8gRmluZHMgbmVhcmVzdCBhbmNlc3RvciBmaWxlCi8vLyByZWxhdGl2ZSB0byB0aGUgW2N3ZF0gdGhhdCBzYXRpc2ZpZXMgW3doZXJlXS4KRmlsZT8gX2ZpbmROZWFyZXN0QW5jZXN0b3IoewogIHJlcXVpcmVkIEZpbGU/IEZ1bmN0aW9uKFN0cmluZyBwYXRoKSB3aGVyZSwKICByZXF1aXJlZCBEaXJlY3RvcnkgY3dkLAp9KSB7CiAgRGlyZWN0b3J5PyBwcmV2OwogIHZhciBkaXIgPSBjd2Q7CiAgd2hpbGUgKHByZXY/LnBhdGggIT0gZGlyLnBhdGgpIHsKICAgIGZpbmFsIGZpbGUgPSB3aGVyZShkaXIucGF0aCk7CiAgICBpZiAoZmlsZT8uZXhpc3RzU3luYygpID8/IGZhbHNlKSByZXR1cm4gZmlsZTsKICAgIHByZXYgPSBkaXI7CiAgICBkaXIgPSBkaXIucGFyZW50OwogIH0KICByZXR1cm4gbnVsbDsKfQo=", + "type": "text" + }, + { + "path": "build/lib/src/create_bundle.dart", + "data": + "aW1wb3J0ICdkYXJ0OmlvJyBhcyBpbzsKCmltcG9ydCAncGFja2FnZTppby9pby5kYXJ0JyBzaG93IGNvcHlQYXRoOwppbXBvcnQgJ3BhY2thZ2U6bWFzb24vbWFzb24uZGFydCc7CmltcG9ydCAncGFja2FnZTpwYXRoL3BhdGguZGFydCcgYXMgcGF0aDsKCkZ1dHVyZTx2b2lkPiBjcmVhdGVCdW5kbGUoewogIHJlcXVpcmVkIEhvb2tDb250ZXh0IGNvbnRleHQsCiAgcmVxdWlyZWQgaW8uRGlyZWN0b3J5IHByb2plY3REaXJlY3RvcnksCiAgcmVxdWlyZWQgaW8uRGlyZWN0b3J5IGJ1aWxkRGlyZWN0b3J5LAogIHJlcXVpcmVkIHZvaWQgRnVuY3Rpb24oaW50IGV4aXRDb2RlKSBleGl0LAp9KSBhc3luYyB7CiAgZmluYWwgZGFydEZyb2dEaXJlY3RvcnlQYXRoID0gcGF0aC5qb2luKHByb2plY3REaXJlY3RvcnkucGF0aCwgJy5kYXJ0X2Zyb2cnKTsKICBmaW5hbCBkYXJ0RnJvZ0RpcmVjdG9yeSA9IGlvLkRpcmVjdG9yeShkYXJ0RnJvZ0RpcmVjdG9yeVBhdGgpOwogIGZpbmFsIGJ1bmRsaW5nUHJvZ3Jlc3MgPSBjb250ZXh0LmxvZ2dlci5wcm9ncmVzcygnQnVuZGxpbmcgc291cmNlcycpOwogIGZpbmFsIHRlbXBEaXJlY3RvcnkgPSBhd2FpdCBpby5EaXJlY3Rvcnkuc3lzdGVtVGVtcC5jcmVhdGVUZW1wKCk7CgogIGlmIChidWlsZERpcmVjdG9yeS5leGlzdHNTeW5jKCkpIHsKICAgIGF3YWl0IGJ1aWxkRGlyZWN0b3J5LmRlbGV0ZShyZWN1cnNpdmU6IHRydWUpOwogIH0KCiAgaWYgKGRhcnRGcm9nRGlyZWN0b3J5LmV4aXN0c1N5bmMoKSkgewogICAgYXdhaXQgZGFydEZyb2dEaXJlY3RvcnkuZGVsZXRlKHJlY3Vyc2l2ZTogdHJ1ZSk7CiAgfQoKICB0cnkgewogICAgYXdhaXQgY29weVBhdGgoCiAgICAgIHByb2plY3REaXJlY3RvcnkucGF0aCwKICAgICAgJyR7dGVtcERpcmVjdG9yeS5wYXRofSR7cGF0aC5zZXBhcmF0b3J9JywKICAgICk7CiAgICBidW5kbGluZ1Byb2dyZXNzLmNvbXBsZXRlKCk7CiAgfSBvbiBFeGNlcHRpb24gY2F0Y2ggKGVycm9yKSB7CiAgICBidW5kbGluZ1Byb2dyZXNzLmZhaWwoKTsKICAgIGNvbnRleHQubG9nZ2VyLmVycignJGVycm9yJyk7CiAgICByZXR1cm4gZXhpdCgxKTsKICB9CiAgYXdhaXQgY29weVBhdGgodGVtcERpcmVjdG9yeS5wYXRoLCBidWlsZERpcmVjdG9yeS5wYXRoKTsKfQo=", + "type": "text" + }, + { + "path": "build/lib/src/create_external_packages_folder.dart", + "data": + "aW1wb3J0ICdkYXJ0OmlvJzsKCmltcG9ydCAncGFja2FnZTpkYXJ0X2Zyb2dfcHJvZF9zZXJ2ZXJfaG9va3MvZGFydF9mcm9nX3Byb2Rfc2VydmVyX2hvb2tzLmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6aW8vaW8uZGFydCcgYXMgaW87CmltcG9ydCAncGFja2FnZTpwYXRoL3BhdGguZGFydCcgYXMgcGF0aDsKaW1wb3J0ICdwYWNrYWdlOnB1YnNwZWNfcGFyc2UvcHVic3BlY19wYXJzZS5kYXJ0JzsKCi8vLyBTaWduYXR1cmUgb2YgW2lvLmNvcHlQYXRoXS4KdHlwZWRlZiBDb3B5UGF0aCA9IEZ1dHVyZTx2b2lkPiBGdW5jdGlvbihTdHJpbmcgZnJvbSwgU3RyaW5nIHRvKTsKCkZ1dHVyZTxMaXN0PFN0cmluZz4+IGNyZWF0ZUV4dGVybmFsUGFja2FnZXNGb2xkZXIoewogIHJlcXVpcmVkIERpcmVjdG9yeSBwcm9qZWN0RGlyZWN0b3J5LAogIHJlcXVpcmVkIERpcmVjdG9yeSBidWlsZERpcmVjdG9yeSwKICBDb3B5UGF0aCBjb3B5UGF0aCA9IGlvLmNvcHlQYXRoLAp9KSBhc3luYyB7CiAgZmluYWwgcGF0aFJlc29sdmVyID0gcGF0aC5jb250ZXh0OwogIGZpbmFsIHB1YnNwZWMgPSBhd2FpdCBnZXRQdWJzcGVjKAogICAgcHJvamVjdERpcmVjdG9yeS5wYXRoLAogICAgcGF0aENvbnRleHQ6IHBhdGguY29udGV4dCwKICApOwoKICBmaW5hbCBleHRlcm5hbFBhdGhEZXBlbmRlbmNpZXMgPSBwdWJzcGVjLmRlcGVuZGVuY2llcy52YWx1ZXMKICAgICAgLm1hcCgKICAgICAgICAoZGVwZW5kZW5jeSkgewogICAgICAgICAgaWYgKGRlcGVuZGVuY3kgaXMhIFBhdGhEZXBlbmRlbmN5KSByZXR1cm4gbnVsbDsKICAgICAgICAgIGlmIChwYXRoUmVzb2x2ZXIuaXNXaXRoaW4oJycsIGRlcGVuZGVuY3kucGF0aCkpIHJldHVybiBudWxsOwoKICAgICAgICAgIHJldHVybiBfRXh0ZXJuYWxQYXRoRGVwZW5kZW5jeSgKICAgICAgICAgICAgbmFtZTogcGF0aC5iYXNlbmFtZVdpdGhvdXRFeHRlbnNpb24oZGVwZW5kZW5jeS5wYXRoKSwKICAgICAgICAgICAgcGF0aDogcGF0aC5qb2luKHByb2plY3REaXJlY3RvcnkucGF0aCwgZGVwZW5kZW5jeS5wYXRoKSwKICAgICAgICAgICk7CiAgICAgICAgfSwKICAgICAgKQogICAgICAud2hlcmVUeXBlPF9FeHRlcm5hbFBhdGhEZXBlbmRlbmN5PigpCiAgICAgIC50b0xpc3QoKTsKCiAgaWYgKGV4dGVybmFsUGF0aERlcGVuZGVuY2llcy5pc0VtcHR5KSByZXR1cm4gW107CgogIGZpbmFsIHBhY2thZ2VzRGlyZWN0b3J5ID0gRGlyZWN0b3J5KAogICAgcGF0aFJlc29sdmVyLmpvaW4oCiAgICAgIGJ1aWxkRGlyZWN0b3J5LnBhdGgsCiAgICAgICcuZGFydF9mcm9nX3BhdGhfZGVwZW5kZW5jaWVzJywKICAgICksCiAgKS4uY3JlYXRlU3luYyhyZWN1cnNpdmU6IHRydWUpOwoKICBmaW5hbCBjb3BpZWRFeHRlcm5hbFBhdGhEZXBlbmRlbmNpZXMgPSBhd2FpdCBGdXR1cmUud2FpdCgKICAgIGV4dGVybmFsUGF0aERlcGVuZGVuY2llcy5tYXAoCiAgICAgIChleHRlcm5hbFBhdGhEZXBlbmRlbmN5KSA9PiBleHRlcm5hbFBhdGhEZXBlbmRlbmN5LmNvcHlUbygKICAgICAgICBjb3B5UGF0aDogY29weVBhdGgsCiAgICAgICAgdGFyZ2V0RGlyZWN0b3J5OiBEaXJlY3RvcnkoCiAgICAgICAgICBwYXRoUmVzb2x2ZXIuam9pbigKICAgICAgICAgICAgcGFja2FnZXNEaXJlY3RvcnkucGF0aCwKICAgICAgICAgICAgZXh0ZXJuYWxQYXRoRGVwZW5kZW5jeS5uYW1lLAogICAgICAgICAgKSwKICAgICAgICApLAogICAgICApLAogICAgKSwKICApOwoKICBhd2FpdCBGaWxlKAogICAgcGF0aFJlc29sdmVyLmpvaW4oCiAgICAgIGJ1aWxkRGlyZWN0b3J5LnBhdGgsCiAgICAgICdwdWJzcGVjX292ZXJyaWRlcy55YW1sJywKICAgICksCiAgKS53cml0ZUFzU3RyaW5nKAogICAgJycnCmRlcGVuZGVuY3lfb3ZlcnJpZGVzOgoke2NvcGllZEV4dGVybmFsUGF0aERlcGVuZGVuY2llcy5tYXAoCiAgICAgIChkZXBlbmRlbmN5KSB7CiAgICAgICAgZmluYWwgbmFtZSA9IGRlcGVuZGVuY3kubmFtZTsKICAgICAgICBmaW5hbCBwYXRoID0KICAgICAgICAgICAgcGF0aFJlc29sdmVyLnJlbGF0aXZlKGRlcGVuZGVuY3kucGF0aCwgZnJvbTogYnVpbGREaXJlY3RvcnkucGF0aCk7CiAgICAgICAgcmV0dXJuICcgICRuYW1lOlxuICAgIHBhdGg6ICRwYXRoJzsKICAgICAgfSwKICAgICkuam9pbignXG4nKX0KJycnLAogICAgbW9kZTogRmlsZU1vZGUuYXBwZW5kLAogICk7CgogIHJldHVybiBjb3BpZWRFeHRlcm5hbFBhdGhEZXBlbmRlbmNpZXMKICAgICAgLm1hcCgoZGVwZW5kZW5jeSkgPT4gZGVwZW5kZW5jeS5wYXRoKQogICAgICAudG9MaXN0KCk7Cn0KCi8vLyB7QHRlbXBsYXRlIGV4dGVybmFsX3BhdGhfZGVwZW5kZW5jeX0KLy8vIEEgcGF0aCBkZXBlbmRlbmN5IHRoYXQgaXMgbm90IHdpdGhpbiB0aGUgYnVuZGxlZCBEYXJ0IEZyb2cgcHJvamVjdAovLy8gZGlyZWN0b3J5LgovLy8KLy8vIEZvciBleGFtcGxlOgovLy8gYGBgeWFtbAovLy8gbmFtZTogbXlfZGFydF9mcm9nX3Byb2plY3QKLy8vIGRlcGVuZGVuY2llczoKLy8vICAgbXlfcGFja2FnZToKLy8vICAgICBwYXRoOiAuLi9teV9wYWNrYWdlCi8vLyBgYGAKLy8vIHtAZW5kdGVtcGxhdGV9CmNsYXNzIF9FeHRlcm5hbFBhdGhEZXBlbmRlbmN5IHsKICAvLy8ge0BtYWNybyBleHRlcm5hbF9wYXRoX2RlcGVuZGVuY3l9CiAgY29uc3QgX0V4dGVybmFsUGF0aERlcGVuZGVuY3koewogICAgcmVxdWlyZWQgdGhpcy5uYW1lLAogICAgcmVxdWlyZWQgdGhpcy5wYXRoLAogIH0pOwoKICAvLy8gVGhlIG5hbWUgb2YgdGhlIHBhY2thZ2UuCiAgZmluYWwgU3RyaW5nIG5hbWU7CgogIC8vLyBUaGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgcGFja2FnZS4KICBmaW5hbCBTdHJpbmcgcGF0aDsKCiAgLy8vIENvcGllcyB0aGUgW19FeHRlcm5hbFBhdGhEZXBlbmRlbmN5XSB0byBbdGFyZ2V0RGlyZWN0b3J5XS4KICBGdXR1cmU8X0V4dGVybmFsUGF0aERlcGVuZGVuY3k+IGNvcHlUbyh7CiAgICByZXF1aXJlZCBEaXJlY3RvcnkgdGFyZ2V0RGlyZWN0b3J5LAogICAgQ29weVBhdGggY29weVBhdGggPSBpby5jb3B5UGF0aCwKICB9KSBhc3luYyB7CiAgICBhd2FpdCBjb3B5UGF0aChwYXRoLCB0YXJnZXREaXJlY3RvcnkucGF0aCk7CiAgICByZXR1cm4gX0V4dGVybmFsUGF0aERlcGVuZGVuY3kobmFtZTogbmFtZSwgcGF0aDogdGFyZ2V0RGlyZWN0b3J5LnBhdGgpOwogIH0KfQo=", + "type": "text" + }, + { + "path": "build/lib/src/dart_pub_get.dart", + "data": + "aW1wb3J0ICdkYXJ0OmlvJyBhcyBpbzsKCmltcG9ydCAncGFja2FnZTptYXNvbi9tYXNvbi5kYXJ0JzsKCnR5cGVkZWYgUHJvY2Vzc1J1bm5lciA9IEZ1dHVyZTxpby5Qcm9jZXNzUmVzdWx0PiBGdW5jdGlvbigKICBTdHJpbmcgZXhlY3V0YWJsZSwKICBMaXN0PFN0cmluZz4gYXJndW1lbnRzLCB7CiAgU3RyaW5nIHdvcmtpbmdEaXJlY3RvcnksCiAgYm9vbCBydW5JblNoZWxsLAp9KTsKCkZ1dHVyZTx2b2lkPiBkYXJ0UHViR2V0KAogIEhvb2tDb250ZXh0IGNvbnRleHQsIHsKICByZXF1aXJlZCBTdHJpbmcgd29ya2luZ0RpcmVjdG9yeSwKICByZXF1aXJlZCBQcm9jZXNzUnVubmVyIHJ1blByb2Nlc3MsCiAgcmVxdWlyZWQgdm9pZCBGdW5jdGlvbihpbnQgZXhpdENvZGUpIGV4aXQsCn0pIGFzeW5jIHsKICBmaW5hbCBwcm9ncmVzcyA9IGNvbnRleHQubG9nZ2VyLnByb2dyZXNzKCdJbnN0YWxsaW5nIGRlcGVuZGVuY2llcycpOwogIHRyeSB7CiAgICBmaW5hbCByZXN1bHQgPSBhd2FpdCBydW5Qcm9jZXNzKAogICAgICAnZGFydCcsCiAgICAgIFsncHViJywgJ2dldCddLAogICAgICB3b3JraW5nRGlyZWN0b3J5OiB3b3JraW5nRGlyZWN0b3J5LAogICAgICBydW5JblNoZWxsOiB0cnVlLAogICAgKTsKICAgIHByb2dyZXNzLmNvbXBsZXRlKCk7CgogICAgaWYgKHJlc3VsdC5leGl0Q29kZSAhPSAwKSB7CiAgICAgIGNvbnRleHQubG9nZ2VyLmVycignJHtyZXN1bHQuc3RkZXJyfScpOwogICAgICByZXR1cm4gZXhpdChyZXN1bHQuZXhpdENvZGUpOwogICAgfQogIH0gb24gaW8uUHJvY2Vzc0V4Y2VwdGlvbiBjYXRjaCAoZXJyb3IpIHsKICAgIGNvbnRleHQubG9nZ2VyLmVycihlcnJvci5tZXNzYWdlKTsKICAgIHJldHVybiBleGl0KGVycm9yLmVycm9yQ29kZSk7CiAgfQp9Cg==", + "type": "text" + }, + { + "path": "build/lib/src/disable_workspace_resolution.dart", + "data": + "aW1wb3J0ICdkYXJ0OmlvJzsKaW1wb3J0ICdwYWNrYWdlOm1hc29uL21hc29uLmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6cGF0aC9wYXRoLmRhcnQnIGFzIHBhdGg7CgovLy8gT3B0cyBvdXQgb2YgZGFydCB3b3Jrc3BhY2VzIHVudGlsIHdlIGNhbiBnZW5lcmF0ZSBwZXIgcGFja2FnZSBsb2NrZmlsZXMuCi8vLyBodHRwczovL2dpdGh1Yi5jb20vZGFydC1sYW5nL3B1Yi9pc3N1ZXMvNDU5NAp2b2lkIGRpc2FibGVXb3Jrc3BhY2VSZXNvbHV0aW9uKAogIEhvb2tDb250ZXh0IGNvbnRleHQsIHsKICByZXF1aXJlZCBTdHJpbmcgYnVpbGREaXJlY3RvcnksCiAgcmVxdWlyZWQgdm9pZCBGdW5jdGlvbihpbnQgZXhpdENvZGUpIGV4aXQsCn0pIHsKICB0cnkgewogICAgRmlsZSgKICAgICAgcGF0aC5qb2luKGJ1aWxkRGlyZWN0b3J5LCAncHVic3BlY19vdmVycmlkZXMueWFtbCcpLAogICAgKS53cml0ZUFzU3RyaW5nU3luYygnXG5yZXNvbHV0aW9uOiBudWxsXG4nLCBtb2RlOiBGaWxlTW9kZS5hcHBlbmQpOwogIH0gb24gRXhjZXB0aW9uIGNhdGNoIChlKSB7CiAgICBjb250ZXh0LmxvZ2dlci5lcnIoJyRlJyk7CiAgICBleGl0KDEpOwogIH0KfQo=", + "type": "text" + }, + { + "path": "build/lib/src/exit_overrides.dart", + "data": + "aW1wb3J0ICdkYXJ0OmFzeW5jJzsKaW1wb3J0ICdkYXJ0OmlvJyBhcyBpbzsKCmNvbnN0IF9hc3luY1J1blpvbmVkID0gcnVuWm9uZWQ7CgphYnN0cmFjdCBjbGFzcyBFeGl0T3ZlcnJpZGVzIHsKICBzdGF0aWMgZmluYWwgX3Rva2VuID0gT2JqZWN0KCk7CgogIHN0YXRpYyBFeGl0T3ZlcnJpZGVzPyBnZXQgY3VycmVudCB7CiAgICByZXR1cm4gWm9uZS5jdXJyZW50W190b2tlbl0gYXMgRXhpdE92ZXJyaWRlcz87CiAgfQoKICBzdGF0aWMgUiBydW5ab25lZDxSPihSIEZ1bmN0aW9uKCkgYm9keSwge3ZvaWQgRnVuY3Rpb24oaW50KT8gZXhpdH0pIHsKICAgIGZpbmFsIG92ZXJyaWRlcyA9IF9FeGl0T3ZlcnJpZGVzU2NvcGUoZXhpdCk7CiAgICByZXR1cm4gX2FzeW5jUnVuWm9uZWQoYm9keSwgem9uZVZhbHVlczoge190b2tlbjogb3ZlcnJpZGVzfSk7CiAgfQoKICB2b2lkIEZ1bmN0aW9uKGludCBleGl0Q29kZSkgZ2V0IGV4aXQgPT4gaW8uZXhpdDsKfQoKY2xhc3MgX0V4aXRPdmVycmlkZXNTY29wZSBleHRlbmRzIEV4aXRPdmVycmlkZXMgewogIF9FeGl0T3ZlcnJpZGVzU2NvcGUodGhpcy5fZXhpdCk7CgogIGZpbmFsIEV4aXRPdmVycmlkZXM/IF9wcmV2aW91cyA9IEV4aXRPdmVycmlkZXMuY3VycmVudDsKICBmaW5hbCB2b2lkIEZ1bmN0aW9uKGludCBleGl0Q29kZSk/IF9leGl0OwoKICBAb3ZlcnJpZGUKICB2b2lkIEZ1bmN0aW9uKGludCBleGl0Q29kZSkgZ2V0IGV4aXQgewogICAgcmV0dXJuIF9leGl0ID8/IF9wcmV2aW91cz8uZXhpdCA/PyBzdXBlci5leGl0OwogIH0KfQo=", + "type": "text" + }, + { + "path": "build/lib/src/get_internal_path_dependencies.dart", + "data": + "aW1wb3J0ICdkYXJ0OmlvJyBhcyBpbzsKCmltcG9ydCAncGFja2FnZTpkYXJ0X2Zyb2dfcHJvZF9zZXJ2ZXJfaG9va3MvZGFydF9mcm9nX3Byb2Rfc2VydmVyX2hvb2tzLmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6cGF0aC9wYXRoLmRhcnQnIGFzIHBhdGg7CmltcG9ydCAncGFja2FnZTpwdWJzcGVjX3BhcnNlL3B1YnNwZWNfcGFyc2UuZGFydCc7CgpGdXR1cmU8TGlzdDxTdHJpbmc+PiBnZXRJbnRlcm5hbFBhdGhEZXBlbmRlbmNpZXMoaW8uRGlyZWN0b3J5IGRpcmVjdG9yeSkgYXN5bmMgewogIGZpbmFsIHB1YnNwZWMgPSBhd2FpdCBnZXRQdWJzcGVjKGRpcmVjdG9yeS5wYXRoKTsKCiAgZmluYWwgaW50ZXJuYWxQYXRoRGVwZW5kZW5jaWVzID0gcHVic3BlYy5kZXBlbmRlbmNpZXMudmFsdWVzLndoZXJlKAogICAgKGRlcGVuZGVuY3kpIHsKICAgICAgcmV0dXJuIGRlcGVuZGVuY3kgaXMgUGF0aERlcGVuZGVuY3kgJiYgcGF0aC5pc1dpdGhpbignJywgZGVwZW5kZW5jeS5wYXRoKTsKICAgIH0sCiAgKS5jYXN0PFBhdGhEZXBlbmRlbmN5PigpOwoKICByZXR1cm4gaW50ZXJuYWxQYXRoRGVwZW5kZW5jaWVzLm1hcCgoZGVwZW5kZW5jeSkgPT4gZGVwZW5kZW5jeS5wYXRoKS50b0xpc3QoKTsKfQo=", + "type": "text" + }, + { + "path": "build/lib/src/get_pubspec.dart", + "data": + "aW1wb3J0ICdkYXJ0OmlvJzsKCmltcG9ydCAncGFja2FnZTpwYXRoL3BhdGguZGFydCcgYXMgcGF0aDsKaW1wb3J0ICdwYWNrYWdlOnB1YnNwZWNfcGFyc2UvcHVic3BlY19wYXJzZS5kYXJ0JzsKCkZ1dHVyZTxQdWJzcGVjPiBnZXRQdWJzcGVjKAogIFN0cmluZyB3b3JraW5nRGlyZWN0b3J5LCB7CiAgcGF0aC5Db250ZXh0PyBwYXRoQ29udGV4dCwKfSkgYXN5bmMgewogIGNvbnN0IHB1YnNwZWNZYW1sID0gJ3B1YnNwZWMueWFtbCc7CiAgZmluYWwgcGF0aFJlc29sdmVyID0gcGF0aENvbnRleHQgPz8gcGF0aC5jb250ZXh0OwogIGZpbmFsIHB1YnNwZWNGaWxlID0gRmlsZSgKICAgIHdvcmtpbmdEaXJlY3RvcnkuaXNFbXB0eQogICAgICAgID8gcHVic3BlY1lhbWwKICAgICAgICA6IHBhdGhSZXNvbHZlci5qb2luKHdvcmtpbmdEaXJlY3RvcnksIHB1YnNwZWNZYW1sKSwKICApOwoKICBmaW5hbCBjb250ZW50ID0gYXdhaXQgcHVic3BlY0ZpbGUucmVhZEFzU3RyaW5nKCk7CiAgcmV0dXJuIFB1YnNwZWMucGFyc2UoY29udGVudCk7Cn0K", + "type": "text" + }, + { + "path": "build/lib/src/uses_workspace_resolution.dart", + "data": + "aW1wb3J0ICdkYXJ0OmlvJzsKaW1wb3J0ICdwYWNrYWdlOm1hc29uL21hc29uLmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6cGF0aC9wYXRoLmRhcnQnIGFzIHBhdGg7CmltcG9ydCAncGFja2FnZTpwdWJzcGVjX3BhcnNlL3B1YnNwZWNfcGFyc2UuZGFydCc7CgovLy8gRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBwcm9qZWN0IGluIHRoZSBwcm92aWRlZCBbd29ya2luZ0RpcmVjdG9yeV0KLy8vIGlzIGNvbmZpZ3VyZWQgdG8gdXNlIGByZXNvbHV0aW9uOiB3b3Jrc3BhY2VgLgpib29sIHVzZXNXb3Jrc3BhY2VSZXNvbHV0aW9uKAogIEhvb2tDb250ZXh0IGNvbnRleHQsIHsKICByZXF1aXJlZCBTdHJpbmcgd29ya2luZ0RpcmVjdG9yeSwKICByZXF1aXJlZCB2b2lkIEZ1bmN0aW9uKGludCBleGl0Q29kZSkgZXhpdCwKfSkgewogIGZpbmFsIHB1YnNwZWNGaWxlID0gRmlsZShwYXRoLmpvaW4od29ya2luZ0RpcmVjdG9yeSwgJ3B1YnNwZWMueWFtbCcpKTsKICBpZiAoIXB1YnNwZWNGaWxlLmV4aXN0c1N5bmMoKSkgcmV0dXJuIGZhbHNlOwoKICBmaW5hbCBQdWJzcGVjIHB1YnNwZWM7CiAgdHJ5IHsKICAgIHB1YnNwZWMgPSBQdWJzcGVjLnBhcnNlKHB1YnNwZWNGaWxlLnJlYWRBc1N0cmluZ1N5bmMoKSk7CiAgfSBvbiBFeGNlcHRpb24gY2F0Y2ggKGUpIHsKICAgIGNvbnRleHQubG9nZ2VyLmVycignJGUnKTsKICAgIGV4aXQoMSk7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICByZXR1cm4gcHVic3BlYy5yZXNvbHV0aW9uID09ICd3b3Jrc3BhY2UnOwp9Cg==", + "type": "text" + }, + { + "path": "build/post_gen.dart", + "data": + "aW1wb3J0ICdkYXJ0OmFzeW5jJzsKaW1wb3J0ICdkYXJ0OmlvJyBhcyBpbzsKCmltcG9ydCAncGFja2FnZTpkYXJ0X2Zyb2dfcHJvZF9zZXJ2ZXJfaG9va3MvZGFydF9mcm9nX3Byb2Rfc2VydmVyX2hvb2tzLmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6bWFzb24vbWFzb24uZGFydCcgc2hvdyBIb29rQ29udGV4dCwgbGlnaHRDeWFuOwppbXBvcnQgJ3BhY2thZ2U6cGF0aC9wYXRoLmRhcnQnIGFzIHBhdGg7Cgp2b2lkIF9kZWZhdWx0RXhpdChpbnQgY29kZSkgPT4gRXhpdE92ZXJyaWRlcy5jdXJyZW50Py5leGl0ID8/IGlvLmV4aXQ7CgpGdXR1cmU8dm9pZD4gcnVuKEhvb2tDb250ZXh0IGNvbnRleHQpID0+IHBvc3RHZW4oY29udGV4dCk7CgpGdXR1cmU8dm9pZD4gcG9zdEdlbigKICBIb29rQ29udGV4dCBjb250ZXh0LCB7CiAgaW8uRGlyZWN0b3J5PyBkaXJlY3RvcnksCiAgUHJvY2Vzc1J1bm5lciBydW5Qcm9jZXNzID0gaW8uUHJvY2Vzcy5ydW4sCiAgdm9pZCBGdW5jdGlvbihpbnQgZXhpdENvZGUpIGV4aXQgPSBfZGVmYXVsdEV4aXQsCn0pIGFzeW5jIHsKICBmaW5hbCBwcm9qZWN0RGlyZWN0b3J5ID0gZGlyZWN0b3J5ID8/IGlvLkRpcmVjdG9yeS5jdXJyZW50OwogIGZpbmFsIGJ1aWxkRGlyZWN0b3J5UGF0aCA9IHBhdGguam9pbihwcm9qZWN0RGlyZWN0b3J5LnBhdGgsICdidWlsZCcpOwoKICBhd2FpdCBkYXJ0UHViR2V0KAogICAgY29udGV4dCwKICAgIHdvcmtpbmdEaXJlY3Rvcnk6IGJ1aWxkRGlyZWN0b3J5UGF0aCwKICAgIHJ1blByb2Nlc3M6IHJ1blByb2Nlc3MsCiAgICBleGl0OiBleGl0LAogICk7CgogIGZpbmFsIHJlbGF0aXZlQnVpbGRQYXRoID0gcGF0aC5yZWxhdGl2ZShidWlsZERpcmVjdG9yeVBhdGgpOwogIGNvbnRleHQubG9nZ2VyCiAgICAuLmluZm8oJycpCiAgICAuLnN1Y2Nlc3MoJ0NyZWF0ZWQgYSBwcm9kdWN0aW9uIGJ1aWxkIScpCiAgICAuLmluZm8oJycpCiAgICAuLmluZm8oJ1N0YXJ0IHRoZSBwcm9kdWN0aW9uIHNlcnZlciBieSBydW5uaW5nOicpCiAgICAuLmluZm8oJycpCiAgICAuLmluZm8oCiAgICAgICcnJyR7bGlnaHRDeWFuLndyYXAoJ2RhcnQgJHtwYXRoLmpvaW4ocmVsYXRpdmVCdWlsZFBhdGgsICdiaW4nLCAnc2VydmVyLmRhcnQnKX0nKX0nJycsCiAgICApOwp9Cg==", + "type": "text" + }, + { + "path": "build/pre_gen.dart", + "data": + "aW1wb3J0ICdkYXJ0OmFzeW5jJzsKaW1wb3J0ICdkYXJ0OmlvJyBhcyBpbzsKCmltcG9ydCAncGFja2FnZTpkYXJ0X2Zyb2dfZ2VuL2RhcnRfZnJvZ19nZW4uZGFydCc7CmltcG9ydCAncGFja2FnZTpkYXJ0X2Zyb2dfcHJvZF9zZXJ2ZXJfaG9va3MvZGFydF9mcm9nX3Byb2Rfc2VydmVyX2hvb2tzLmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6aW8vaW8uZGFydCcgYXMgaW9fZXhwYW5kZWQ7CmltcG9ydCAncGFja2FnZTptYXNvbi9tYXNvbi5kYXJ0JwogICAgc2hvdyBIb29rQ29udGV4dCwgZGVmYXVsdEZvcmVncm91bmQsIGxpZ2h0Q3lhbjsKaW1wb3J0ICdwYWNrYWdlOnBhdGgvcGF0aC5kYXJ0JyBhcyBwYXRoOwoKdHlwZWRlZiBSb3V0ZUNvbmZpZ3VyYXRpb25CdWlsZGVyID0gUm91dGVDb25maWd1cmF0aW9uIEZ1bmN0aW9uKAogIGlvLkRpcmVjdG9yeSBkaXJlY3RvcnksCik7Cgp2b2lkIF9kZWZhdWx0RXhpdChpbnQgY29kZSkgPT4gRXhpdE92ZXJyaWRlcy5jdXJyZW50Py5leGl0ID8/IGlvLmV4aXQ7CgpGdXR1cmU8dm9pZD4gcnVuKEhvb2tDb250ZXh0IGNvbnRleHQpID0+IHByZUdlbihjb250ZXh0KTsKCkZ1dHVyZTx2b2lkPiBwcmVHZW4oCiAgSG9va0NvbnRleHQgY29udGV4dCwgewogIGlvLkRpcmVjdG9yeT8gZGlyZWN0b3J5LAogIFByb2Nlc3NSdW5uZXIgcnVuUHJvY2VzcyA9IGlvLlByb2Nlc3MucnVuLAogIFJvdXRlQ29uZmlndXJhdGlvbkJ1aWxkZXIgYnVpbGRDb25maWd1cmF0aW9uID0gYnVpbGRSb3V0ZUNvbmZpZ3VyYXRpb24sCiAgdm9pZCBGdW5jdGlvbihpbnQgZXhpdENvZGUpIGV4aXQgPSBfZGVmYXVsdEV4aXQsCiAgRnV0dXJlPHZvaWQ+IEZ1bmN0aW9uKFN0cmluZyBmcm9tLCBTdHJpbmcgdG8pIGNvcHlQYXRoID0gaW9fZXhwYW5kZWQuY29weVBhdGgsCn0pIGFzeW5jIHsKICBmaW5hbCBwcm9qZWN0RGlyZWN0b3J5ID0gZGlyZWN0b3J5ID8/IGlvLkRpcmVjdG9yeS5jdXJyZW50OwogIGZpbmFsIGJ1aWxkRGlyZWN0b3J5ID0gaW8uRGlyZWN0b3J5KAogICAgcGF0aC5qb2luKHByb2plY3REaXJlY3RvcnkucGF0aCwgJ2J1aWxkJyksCiAgKTsKICBmaW5hbCB1c2VzV29ya3NwYWNlcyA9IHVzZXNXb3Jrc3BhY2VSZXNvbHV0aW9uKAogICAgY29udGV4dCwKICAgIHdvcmtpbmdEaXJlY3Rvcnk6IHByb2plY3REaXJlY3RvcnkucGF0aCwKICAgIGV4aXQ6IGV4aXQsCiAgKTsKCiAgYXdhaXQgY3JlYXRlQnVuZGxlKAogICAgY29udGV4dDogY29udGV4dCwKICAgIHByb2plY3REaXJlY3Rvcnk6IHByb2plY3REaXJlY3RvcnksCiAgICBidWlsZERpcmVjdG9yeTogYnVpbGREaXJlY3RvcnksCiAgICBleGl0OiBleGl0LAogICk7CgogIGlmICh1c2VzV29ya3NwYWNlcykgewogICAgLy8gRGlzYWJsZSB3b3Jrc3BhY2UgcmVzb2x1dGlvbiB1bnRpbCB3ZSBjYW4gZ2VuZXJhdGUgcGVyLXBhY2thZ2UgbG9ja2ZpbGVzLgogICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2RhcnQtbGFuZy9wdWIvaXNzdWVzLzQ1OTQKICAgIGRpc2FibGVXb3Jrc3BhY2VSZXNvbHV0aW9uKAogICAgICBjb250ZXh0LAogICAgICBidWlsZERpcmVjdG9yeTogYnVpbGREaXJlY3RvcnkucGF0aCwKICAgICAgZXhpdDogZXhpdCwKICAgICk7CiAgICAvLyBDb3B5IHRoZSBwdWJzcGVjLmxvY2sgZnJvbSB0aGUgd29ya3NwYWNlIHJvb3QgdG8gZW5zdXJlIHRoZSBzYW1lIHZlcnNpb25zCiAgICAvLyBvZiBkZXBlbmRlbmNpZXMgYXJlIHVzZWQgaW4gdGhlIHByb2R1Y3Rpb24gYnVpbGQuCiAgICBjb3B5V29ya3NwYWNlUHVic3BlY0xvY2soCiAgICAgIGNvbnRleHQsCiAgICAgIGJ1aWxkRGlyZWN0b3J5OiBidWlsZERpcmVjdG9yeS5wYXRoLAogICAgICB3b3JraW5nRGlyZWN0b3J5OiBwcm9qZWN0RGlyZWN0b3J5LnBhdGgsCiAgICAgIGV4aXQ6IGV4aXQsCiAgICApOwogIH0KCiAgZmluYWwgUm91dGVDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb247CiAgdHJ5IHsKICAgIGNvbmZpZ3VyYXRpb24gPSBidWlsZENvbmZpZ3VyYXRpb24ocHJvamVjdERpcmVjdG9yeSk7CiAgfSBvbiBFeGNlcHRpb24gY2F0Y2ggKGVycm9yKSB7CiAgICBjb250ZXh0LmxvZ2dlci5lcnIoJyRlcnJvcicpOwogICAgcmV0dXJuIGV4aXQoMSk7CiAgfQoKICByZXBvcnRSb3V0ZUNvbmZsaWN0cygKICAgIGNvbmZpZ3VyYXRpb24sCiAgICBvblJvdXRlQ29uZmxpY3Q6ICgKICAgICAgb3JpZ2luYWxGaWxlUGF0aCwKICAgICAgY29uZmxpY3RpbmdGaWxlUGF0aCwKICAgICAgY29uZmxpY3RpbmdFbmRwb2ludCwKICAgICkgewogICAgICBjb250ZXh0LmxvZ2dlci5lcnIoCiAgICAgICAgJycnUm91dGUgY29uZmxpY3QgZGV0ZWN0ZWQuICR7bGlnaHRDeWFuLndyYXAob3JpZ2luYWxGaWxlUGF0aCl9IGFuZCAke2xpZ2h0Q3lhbi53cmFwKGNvbmZsaWN0aW5nRmlsZVBhdGgpfSBib3RoIHJlc29sdmUgdG8gJHtsaWdodEN5YW4ud3JhcChjb25mbGljdGluZ0VuZHBvaW50KX0uJycnLAogICAgICApOwogICAgfSwKICAgIG9uVmlvbGF0aW9uRW5kOiAoKSA9PiBleGl0KDEpLAogICk7CgogIHJlcG9ydFJvZ3VlUm91dGVzKAogICAgY29uZmlndXJhdGlvbiwKICAgIG9uUm9ndWVSb3V0ZTogKGZpbGVQYXRoLCBpZGVhbFBhdGgpIHsKICAgICAgY29udGV4dC5sb2dnZXIuZXJyKAogICAgICAgICcnJ1JvZ3VlIHJvdXRlIGRldGVjdGVkLiR7ZGVmYXVsdEZvcmVncm91bmQud3JhcCgnICcpfVJlbmFtZSAke2xpZ2h0Q3lhbi53cmFwKGZpbGVQYXRoKX0gdG8gJHtsaWdodEN5YW4ud3JhcChpZGVhbFBhdGgpfS4nJycsCiAgICAgICk7CiAgICB9LAogICAgb25WaW9sYXRpb25FbmQ6ICgpID0+IGV4aXQoMSksCiAgKTsKCiAgZmluYWwgY3VzdG9tRG9ja2VyRmlsZSA9IGlvLkZpbGUoCiAgICBwYXRoLmpvaW4ocHJvamVjdERpcmVjdG9yeS5wYXRoLCAnRG9ja2VyZmlsZScpLAogICk7CgogIGZpbmFsIGludGVybmFsUGF0aERlcGVuZGVuY2llcyA9IGF3YWl0IGdldEludGVybmFsUGF0aERlcGVuZGVuY2llcygKICAgIHByb2plY3REaXJlY3RvcnksCiAgKTsKCiAgZmluYWwgZXh0ZXJuYWxEZXBlbmRlbmNpZXMgPSBhd2FpdCBjcmVhdGVFeHRlcm5hbFBhY2thZ2VzRm9sZGVyKAogICAgcHJvamVjdERpcmVjdG9yeTogcHJvamVjdERpcmVjdG9yeSwKICAgIGJ1aWxkRGlyZWN0b3J5OiBidWlsZERpcmVjdG9yeSwKICAgIGNvcHlQYXRoOiBjb3B5UGF0aCwKICApOwoKICBmaW5hbCBhZGREb2NrZXJmaWxlID0gIWN1c3RvbURvY2tlckZpbGUuZXhpc3RzU3luYygpOwoKICBjb250ZXh0LnZhcnMgPSB7CiAgICAnZGlyZWN0b3JpZXMnOiBjb25maWd1cmF0aW9uLmRpcmVjdG9yaWVzCiAgICAgICAgLm1hcCgoYykgPT4gYy50b0pzb24oKSkKICAgICAgICAudG9MaXN0KCkKICAgICAgICAucmV2ZXJzZWQKICAgICAgICAudG9MaXN0KCksCiAgICAncm91dGVzJzogY29uZmlndXJhdGlvbi5yb3V0ZXMubWFwKChyKSA9PiByLnRvSnNvbigpKS50b0xpc3QoKSwKICAgICdtaWRkbGV3YXJlJzogY29uZmlndXJhdGlvbi5taWRkbGV3YXJlLm1hcCgobSkgPT4gbS50b0pzb24oKSkudG9MaXN0KCksCiAgICAnZ2xvYmFsTWlkZGxld2FyZSc6IGNvbmZpZ3VyYXRpb24uZ2xvYmFsTWlkZGxld2FyZSAhPSBudWxsCiAgICAgICAgPyBjb25maWd1cmF0aW9uLmdsb2JhbE1pZGRsZXdhcmUhLnRvSnNvbigpCiAgICAgICAgOiBmYWxzZSwKICAgICdzZXJ2ZVN0YXRpY0ZpbGVzJzogY29uZmlndXJhdGlvbi5zZXJ2ZVN0YXRpY0ZpbGVzLAogICAgJ2ludm9rZUN1c3RvbUVudHJ5cG9pbnQnOiBjb25maWd1cmF0aW9uLmludm9rZUN1c3RvbUVudHJ5cG9pbnQsCiAgICAnaW52b2tlQ3VzdG9tSW5pdCc6IGNvbmZpZ3VyYXRpb24uaW52b2tlQ3VzdG9tSW5pdCwKICAgICdwYXRoRGVwZW5kZW5jaWVzJzogaW50ZXJuYWxQYXRoRGVwZW5kZW5jaWVzLAogICAgJ2hhc0V4dGVybmFsRGVwZW5kZW5jaWVzJzogZXh0ZXJuYWxEZXBlbmRlbmNpZXMuaXNOb3RFbXB0eSwKICAgICdkYXJ0VmVyc2lvbic6IGNvbnRleHQudmFyc1snZGFydFZlcnNpb24nXSwKICAgICdhZGREb2NrZXJmaWxlJzogYWRkRG9ja2VyZmlsZSwKICB9Owp9Cg==", + "type": "text" + }, + { + "path": "build/pubspec.yaml", + "data": + "bmFtZTogZGFydF9mcm9nX3Byb2Rfc2VydmVyX2hvb2tzCnB1Ymxpc2hfdG86IG5vbmUKCmVudmlyb25tZW50OgogIHNkazogIj49My4wLjAgPDQuMC4wIgoKZGVwZW5kZW5jaWVzOgogIGRhcnRfZnJvZ19nZW46IF4yLjAuMAogIGVxdWF0YWJsZTogXjIuMC41CiAgaW86IF4xLjAuMwogIG1hc29uOiBeMC4xLjAKICBwYXRoOiBeMS44LjEKICBwdWJzcGVjX3BhcnNlOiBeMS41LjAKICB5YW1sOiBeMy4xLjIKCmRldl9kZXBlbmRlbmNpZXM6CiAgbW9ja3RhaWw6IF4xLjAuMAogIHRlc3Q6IF4xLjI1LjAKICB2ZXJ5X2dvb2RfYW5hbHlzaXM6IF45LjAuMAo=", + "type": "text" + }, + { + "path": "build/test/post_gen_test.dart", + "data": + "aW1wb3J0ICdkYXJ0OmlvJzsKCmltcG9ydCAncGFja2FnZTpkYXJ0X2Zyb2dfcHJvZF9zZXJ2ZXJfaG9va3MvZGFydF9mcm9nX3Byb2Rfc2VydmVyX2hvb2tzLmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6bWFzb24vbWFzb24uZGFydCcKICAgIHNob3cgRXhpdENvZGUsIEhvb2tDb250ZXh0LCBMb2dnZXIsIFByb2dyZXNzLCBsaWdodEN5YW47CmltcG9ydCAncGFja2FnZTptb2NrdGFpbC9tb2NrdGFpbC5kYXJ0JzsKaW1wb3J0ICdwYWNrYWdlOnBhdGgvcGF0aC5kYXJ0JyBhcyBwYXRoOwppbXBvcnQgJ3BhY2thZ2U6dGVzdC90ZXN0LmRhcnQnOwoKaW1wb3J0ICcuLi9wb3N0X2dlbi5kYXJ0JyBhcyBwb3N0X2dlbjsKCmNsYXNzIF9GYWtlSG9va0NvbnRleHQgZXh0ZW5kcyBGYWtlIGltcGxlbWVudHMgSG9va0NvbnRleHQgewogIF9GYWtlSG9va0NvbnRleHQoe0xvZ2dlcj8gbG9nZ2VyfSkgOiBfbG9nZ2VyID0gbG9nZ2VyID8/IF9Nb2NrTG9nZ2VyKCk7CgogIGZpbmFsIExvZ2dlciBfbG9nZ2VyOwoKICB2YXIgX3ZhcnMgPSA8U3RyaW5nLCBkeW5hbWljPnt9OwoKICBAb3ZlcnJpZGUKICBNYXA8U3RyaW5nLCBkeW5hbWljPiBnZXQgdmFycyA9PiBfdmFyczsKCiAgQG92ZXJyaWRlCiAgc2V0IHZhcnMoTWFwPFN0cmluZywgZHluYW1pYz4gdmFsdWUpID0+IF92YXJzID0gdmFsdWU7CgogIEBvdmVycmlkZQogIExvZ2dlciBnZXQgbG9nZ2VyID0+IF9sb2dnZXI7Cn0KCmNsYXNzIF9Nb2NrTG9nZ2VyIGV4dGVuZHMgTW9jayBpbXBsZW1lbnRzIExvZ2dlciB7fQoKY2xhc3MgX01vY2tQcm9ncmVzcyBleHRlbmRzIE1vY2sgaW1wbGVtZW50cyBQcm9ncmVzcyB7fQoKdm9pZCBtYWluKCkgewogIGdyb3VwKCdwb3N0R2VuJywgKCkgewogICAgbGF0ZSBIb29rQ29udGV4dCBjb250ZXh0OwogICAgbGF0ZSBMb2dnZXIgbG9nZ2VyOwoKICAgIGNvbnN0IHByb2Nlc3NJZCA9IDQyOwogICAgZmluYWwgcHJvY2Vzc1Jlc3VsdCA9IFByb2Nlc3NSZXN1bHQoCiAgICAgIHByb2Nlc3NJZCwKICAgICAgRXhpdENvZGUuc3VjY2Vzcy5jb2RlLAogICAgICAnJywKICAgICAgJycsCiAgICApOwoKICAgIHNldFVwKCgpIHsKICAgICAgbG9nZ2VyID0gX01vY2tMb2dnZXIoKTsKICAgICAgY29udGV4dCA9IF9GYWtlSG9va0NvbnRleHQobG9nZ2VyOiBsb2dnZXIpOwoKICAgICAgd2hlbigoKSA9PiBsb2dnZXIucHJvZ3Jlc3MoYW55KCkpKS50aGVuUmV0dXJuKF9Nb2NrUHJvZ3Jlc3MoKSk7CiAgICB9KTsKCiAgICB0ZXN0KCdydW4gY29tcGxldGVzJywgKCkgewogICAgICBleHBlY3QoCiAgICAgICAgRXhpdE92ZXJyaWRlcy5ydW5ab25lZCgKICAgICAgICAgICgpID0+IHBvc3RfZ2VuLnJ1bihfRmFrZUhvb2tDb250ZXh0KGxvZ2dlcjogbG9nZ2VyKSksCiAgICAgICAgKSwKICAgICAgICBjb21wbGV0ZXMsCiAgICAgICk7CiAgICB9KTsKCiAgICB0ZXN0KCdydW5zIGRhcnQgcHViIGdldCBhbmQgb3V0cHV0cyBuZXh0IHN0ZXBzJywgKCkgYXN5bmMgewogICAgICB2YXIgcHJvY2Vzc1J1bm5lckNhbGxDb3VudCA9IDA7CiAgICAgIGZpbmFsIGV4aXRDYWxscyA9IDxpbnQ+W107CgogICAgICBhd2FpdCBwb3N0X2dlbi5wb3N0R2VuKAogICAgICAgIGNvbnRleHQsCiAgICAgICAgcnVuUHJvY2VzczogKAogICAgICAgICAgZXhlY3V0YWJsZSwKICAgICAgICAgIGFyZ3MsIHsKICAgICAgICAgIFN0cmluZz8gd29ya2luZ0RpcmVjdG9yeSwKICAgICAgICAgIGJvb2w/IHJ1bkluU2hlbGwsCiAgICAgICAgfSkgYXN5bmMgewogICAgICAgICAgcHJvY2Vzc1J1bm5lckNhbGxDb3VudCsrOwogICAgICAgICAgZXhwZWN0KGV4ZWN1dGFibGUsIGVxdWFscygnZGFydCcpKTsKICAgICAgICAgIGV4cGVjdChhcmdzLCBlcXVhbHMoWydwdWInLCAnZ2V0J10pKTsKICAgICAgICAgIGV4cGVjdCgKICAgICAgICAgICAgd29ya2luZ0RpcmVjdG9yeSwKICAgICAgICAgICAgZXF1YWxzKHBhdGguam9pbihEaXJlY3RvcnkuY3VycmVudC5wYXRoLCAnYnVpbGQnKSksCiAgICAgICAgICApOwogICAgICAgICAgZXhwZWN0KHJ1bkluU2hlbGwsIGlzVHJ1ZSk7CiAgICAgICAgICByZXR1cm4gcHJvY2Vzc1Jlc3VsdDsKICAgICAgICB9LAogICAgICAgIGV4aXQ6IGV4aXRDYWxscy5hZGQsCiAgICAgICk7CiAgICAgIGV4cGVjdChwcm9jZXNzUnVubmVyQ2FsbENvdW50LCBlcXVhbHMoMSkpOwogICAgICBleHBlY3QoZXhpdENhbGxzLCBpc0VtcHR5KTsKICAgICAgdmVyaWZ5KCgpID0+IGxvZ2dlci5zdWNjZXNzKCdDcmVhdGVkIGEgcHJvZHVjdGlvbiBidWlsZCEnKSkuY2FsbGVkKDEpOwogICAgICB2ZXJpZnkoCiAgICAgICAgKCkgPT4gbG9nZ2VyLmluZm8oJ1N0YXJ0IHRoZSBwcm9kdWN0aW9uIHNlcnZlciBieSBydW5uaW5nOicpLAogICAgICApLmNhbGxlZCgxKTsKICAgICAgdmVyaWZ5KAogICAgICAgICgpID0+IGxvZ2dlci5pbmZvKCcke2xpZ2h0Q3lhbi53cmFwKCdkYXJ0IGJ1aWxkL2Jpbi9zZXJ2ZXIuZGFydCcpfScpLAogICAgICApLmNhbGxlZCgxKTsKICAgICAgdmVyaWZ5TmV2ZXIoKCkgPT4gbG9nZ2VyLmVycihhbnkoKSkpOwogICAgfSk7CiAgfSk7Cn0K", + "type": "text" + }, + { + "path": "build/test/pre_gen_test.dart", + "data": + "aW1wb3J0ICdkYXJ0OmlvJzsKCmltcG9ydCAncGFja2FnZTpkYXJ0X2Zyb2dfZ2VuL2RhcnRfZnJvZ19nZW4uZGFydCc7CmltcG9ydCAncGFja2FnZTpkYXJ0X2Zyb2dfcHJvZF9zZXJ2ZXJfaG9va3MvZGFydF9mcm9nX3Byb2Rfc2VydmVyX2hvb2tzLmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6bWFzb24vbWFzb24uZGFydCcKICAgIHNob3cgSG9va0NvbnRleHQsIExvZ2dlciwgUHJvZ3Jlc3MsIGRlZmF1bHRGb3JlZ3JvdW5kLCBsaWdodEN5YW47CmltcG9ydCAncGFja2FnZTptb2NrdGFpbC9tb2NrdGFpbC5kYXJ0JzsKaW1wb3J0ICdwYWNrYWdlOnBhdGgvcGF0aC5kYXJ0JyBhcyBwYXRoOwppbXBvcnQgJ3BhY2thZ2U6dGVzdC90ZXN0LmRhcnQnOwoKaW1wb3J0ICcuLi9wcmVfZ2VuLmRhcnQnIGFzIHByZV9nZW47CmltcG9ydCAncHVic3BlY3MuZGFydCc7CgpjbGFzcyBfRmFrZUhvb2tDb250ZXh0IGV4dGVuZHMgRmFrZSBpbXBsZW1lbnRzIEhvb2tDb250ZXh0IHsKICBfRmFrZUhvb2tDb250ZXh0KHtMb2dnZXI/IGxvZ2dlcn0pIDogX2xvZ2dlciA9IGxvZ2dlciA/PyBfTW9ja0xvZ2dlcigpOwoKICBmaW5hbCBMb2dnZXIgX2xvZ2dlcjsKCiAgdmFyIF92YXJzID0gPFN0cmluZywgZHluYW1pYz57fTsKCiAgQG92ZXJyaWRlCiAgTWFwPFN0cmluZywgZHluYW1pYz4gZ2V0IHZhcnMgPT4gX3ZhcnM7CgogIEBvdmVycmlkZQogIHNldCB2YXJzKE1hcDxTdHJpbmcsIGR5bmFtaWM+IHZhbHVlKSA9PiBfdmFycyA9IHZhbHVlOwoKICBAb3ZlcnJpZGUKICBMb2dnZXIgZ2V0IGxvZ2dlciA9PiBfbG9nZ2VyOwp9CgpjbGFzcyBfTW9ja0xvZ2dlciBleHRlbmRzIE1vY2sgaW1wbGVtZW50cyBMb2dnZXIge30KCmNsYXNzIF9Nb2NrUHJvZ3Jlc3MgZXh0ZW5kcyBNb2NrIGltcGxlbWVudHMgUHJvZ3Jlc3Mge30KCnZvaWQgbWFpbigpIHsKICBncm91cCgncHJlR2VuJywgKCkgewogICAgbGF0ZSBIb29rQ29udGV4dCBjb250ZXh0OwogICAgbGF0ZSBMb2dnZXIgbG9nZ2VyOwoKICAgIEZ1dHVyZTxQcm9jZXNzUmVzdWx0PiBzdWNjZXNzUnVuUHJvY2VzcygKICAgICAgZXhlY3V0YWJsZSwKICAgICAgYXJncywgewogICAgICBTdHJpbmc/IHdvcmtpbmdEaXJlY3RvcnksCiAgICAgIGJvb2w/IHJ1bkluU2hlbGwsCiAgICB9KSA9PgogICAgICAgIEZ1dHVyZS52YWx1ZShQcm9jZXNzUmVzdWx0KDAsIDAsICcnLCAnJykpOwoKICAgIHNldFVwKCgpIHsKICAgICAgbG9nZ2VyID0gX01vY2tMb2dnZXIoKTsKICAgICAgY29udGV4dCA9IF9GYWtlSG9va0NvbnRleHQobG9nZ2VyOiBsb2dnZXIpCiAgICAgICAgLi52YXJzWydkYXJ0VmVyc2lvbiddID0gJ3N0YWJsZSc7CgogICAgICB3aGVuKCgpID0+IGxvZ2dlci5wcm9ncmVzcyhhbnkoKSkpLnRoZW5SZXR1cm4oX01vY2tQcm9ncmVzcygpKTsKICAgIH0pOwoKICAgIHRlc3QoJ3J1biBjb21wbGV0ZXMnLCAoKSB7CiAgICAgIGV4cGVjdCgKICAgICAgICBFeGl0T3ZlcnJpZGVzLnJ1blpvbmVkKAogICAgICAgICAgKCkgPT4gcHJlX2dlbi5ydW4oX0Zha2VIb29rQ29udGV4dChsb2dnZXI6IGxvZ2dlcikpLAogICAgICAgICAgZXhpdDogKF8pIHt9LAogICAgICAgICksCiAgICAgICAgY29tcGxldGVzLAogICAgICApOwogICAgfSk7CgogICAgdGVzdCgnZXhpdCgxKSBpZiBidWlsZFJvdXRlQ29uZmlndXJhdGlvbiB0aHJvd3MnLCAoKSBhc3luYyB7CiAgICAgIGZpbmFsIGV4aXRDYWxscyA9IDxpbnQ+W107CiAgICAgIGZpbmFsIGV4Y2VwdGlvbiA9IEV4Y2VwdGlvbignb29wcycpOwogICAgICBhd2FpdCBwcmVfZ2VuLnByZUdlbigKICAgICAgICBjb250ZXh0LAogICAgICAgIGJ1aWxkQ29uZmlndXJhdGlvbjogKF8pID0+IHRocm93IGV4Y2VwdGlvbiwKICAgICAgICBleGl0OiBleGl0Q2FsbHMuYWRkLAogICAgICAgIHJ1blByb2Nlc3M6IHN1Y2Nlc3NSdW5Qcm9jZXNzLAogICAgICApOwogICAgICBleHBlY3QoZXhpdENhbGxzLCBlcXVhbHMoWzFdKSk7CiAgICAgIHZlcmlmeSgoKSA9PiBsb2dnZXIuZXJyKGV4Y2VwdGlvbi50b1N0cmluZygpKSkuY2FsbGVkKDEpOwogICAgfSk7CgogICAgdGVzdCgnZXhpdCgxKSBmb3Igcm91dGUgY29uZmxpY3RzJywgKCkgYXN5bmMgewogICAgICBjb25zdCBjb25maWd1cmF0aW9uID0gUm91dGVDb25maWd1cmF0aW9uKAogICAgICAgIG1pZGRsZXdhcmU6IFtdLAogICAgICAgIGRpcmVjdG9yaWVzOiBbXSwKICAgICAgICByb3V0ZXM6IFtdLAogICAgICAgIHJvZ3VlUm91dGVzOiBbXSwKICAgICAgICBlbmRwb2ludHM6IHsKICAgICAgICAgICcvJzogWwogICAgICAgICAgICBSb3V0ZUZpbGUoCiAgICAgICAgICAgICAgbmFtZTogJ2luZGV4JywKICAgICAgICAgICAgICBwYXRoOiAnaW5kZXguZGFydCcsCiAgICAgICAgICAgICAgcm91dGU6ICcvJywKICAgICAgICAgICAgICBwYXJhbXM6IFtdLAogICAgICAgICAgICAgIHdpbGRjYXJkOiBmYWxzZSwKICAgICAgICAgICAgKSwKICAgICAgICAgIF0sCiAgICAgICAgICAnL2hlbGxvJzogWwogICAgICAgICAgICBSb3V0ZUZpbGUoCiAgICAgICAgICAgICAgbmFtZTogJ2hlbGxvJywKICAgICAgICAgICAgICBwYXRoOiAnaGVsbG8uZGFydCcsCiAgICAgICAgICAgICAgcm91dGU6ICcvaGVsbG8nLAogICAgICAgICAgICAgIHBhcmFtczogW10sCiAgICAgICAgICAgICAgd2lsZGNhcmQ6IGZhbHNlLAogICAgICAgICAgICApLAogICAgICAgICAgICBSb3V0ZUZpbGUoCiAgICAgICAgICAgICAgbmFtZTogJ2hlbGxvX2luZGV4JywKICAgICAgICAgICAgICBwYXRoOiAnaGVsbG8vaW5kZXguZGFydCcsCiAgICAgICAgICAgICAgcm91dGU6ICcvJywKICAgICAgICAgICAgICBwYXJhbXM6IFtdLAogICAgICAgICAgICAgIHdpbGRjYXJkOiBmYWxzZSwKICAgICAgICAgICAgKSwKICAgICAgICAgIF0sCiAgICAgICAgfSwKICAgICAgKTsKCiAgICAgIGZpbmFsIGV4aXRDYWxscyA9IDxpbnQ+W107CiAgICAgIGF3YWl0IHByZV9nZW4ucHJlR2VuKAogICAgICAgIGNvbnRleHQsCiAgICAgICAgYnVpbGRDb25maWd1cmF0aW9uOiAoXykgPT4gY29uZmlndXJhdGlvbiwKICAgICAgICBleGl0OiBleGl0Q2FsbHMuYWRkLAogICAgICAgIHJ1blByb2Nlc3M6IHN1Y2Nlc3NSdW5Qcm9jZXNzLAogICAgICApOwoKICAgICAgdmVyaWZ5KAogICAgICAgICgpID0+IGxvZ2dlci5lcnIoCiAgICAgICAgICAnJydSb3V0ZSBjb25mbGljdCBkZXRlY3RlZC4gJHtsaWdodEN5YW4ud3JhcCgncm91dGVzL2hlbGxvLmRhcnQnKX0gYW5kICR7bGlnaHRDeWFuLndyYXAoJ3JvdXRlcy9oZWxsby9pbmRleC5kYXJ0Jyl9IGJvdGggcmVzb2x2ZSB0byAke2xpZ2h0Q3lhbi53cmFwKCcvaGVsbG8nKX0uJycnLAogICAgICAgICksCiAgICAgICk7CiAgICAgIGV4cGVjdChleGl0Q2FsbHMsIGVxdWFscyhbMV0pKTsKICAgIH0pOwoKICAgIHRlc3QoJ2V4aXQoMSkgZm9yIHJvZ3VlIHJvdXRlcycsICgpIGFzeW5jIHsKICAgICAgY29uc3QgY29uZmlndXJhdGlvbiA9IFJvdXRlQ29uZmlndXJhdGlvbigKICAgICAgICBtaWRkbGV3YXJlOiBbXSwKICAgICAgICBkaXJlY3RvcmllczogW10sCiAgICAgICAgcm91dGVzOiBbXSwKICAgICAgICByb2d1ZVJvdXRlczogWwogICAgICAgICAgUm91dGVGaWxlKAogICAgICAgICAgICBuYW1lOiAnaGVsbG8nLAogICAgICAgICAgICBwYXRoOiAnaGVsbG8uZGFydCcsCiAgICAgICAgICAgIHJvdXRlOiAnL2hlbGxvJywKICAgICAgICAgICAgcGFyYW1zOiBbXSwKICAgICAgICAgICAgd2lsZGNhcmQ6IGZhbHNlLAogICAgICAgICAgKSwKICAgICAgICBdLAogICAgICAgIGVuZHBvaW50czoge30sCiAgICAgICAgaW52b2tlQ3VzdG9tRW50cnlwb2ludDogdHJ1ZSwKICAgICAgKTsKCiAgICAgIGZpbmFsIGV4aXRDYWxscyA9IDxpbnQ+W107CiAgICAgIGF3YWl0IHByZV9nZW4ucHJlR2VuKAogICAgICAgIGNvbnRleHQsCiAgICAgICAgYnVpbGRDb25maWd1cmF0aW9uOiAoXykgPT4gY29uZmlndXJhdGlvbiwKICAgICAgICBleGl0OiBleGl0Q2FsbHMuYWRkLAogICAgICAgIHJ1blByb2Nlc3M6IHN1Y2Nlc3NSdW5Qcm9jZXNzLAogICAgICApOwoKICAgICAgdmVyaWZ5KAogICAgICAgICgpID0+IGxvZ2dlci5lcnIoCiAgICAgICAgICAnJydSb2d1ZSByb3V0ZSBkZXRlY3RlZC4ke2RlZmF1bHRGb3JlZ3JvdW5kLndyYXAoJyAnKX1SZW5hbWUgJHtsaWdodEN5YW4ud3JhcCgncm91dGVzL2hlbGxvLmRhcnQnKX0gdG8gJHtsaWdodEN5YW4ud3JhcCgncm91dGVzL2hlbGxvL2luZGV4LmRhcnQnKX0uJycnLAogICAgICAgICksCiAgICAgICk7CiAgICAgIGV4cGVjdChleGl0Q2FsbHMsIGVxdWFscyhbMV0pKTsKICAgIH0pOwoKICAgIHRlc3QoJ3dvcmtzIHdpdGggd29ya3NwYWNlcycsICgpIGFzeW5jIHsKICAgICAgY29uc3QgY29uZmlndXJhdGlvbiA9IFJvdXRlQ29uZmlndXJhdGlvbigKICAgICAgICBtaWRkbGV3YXJlOiBbXSwKICAgICAgICBkaXJlY3RvcmllczogW10sCiAgICAgICAgcm91dGVzOiBbXSwKICAgICAgICByb2d1ZVJvdXRlczogW10sCiAgICAgICAgZW5kcG9pbnRzOiB7fSwKICAgICAgKTsKCiAgICAgIGZpbmFsIGRpcmVjdG9yeSA9IERpcmVjdG9yeS5zeXN0ZW1UZW1wLmNyZWF0ZVRlbXBTeW5jKCk7CiAgICAgIEZpbGUoCiAgICAgICAgcGF0aC5qb2luKGRpcmVjdG9yeS5wYXRoLCAncHVic3BlYy55YW1sJyksCiAgICAgICkud3JpdGVBc1N0cmluZ1N5bmMod29ya3NwYWNlUm9vdCk7CiAgICAgIGZpbmFsIHNlcnZlciA9IERpcmVjdG9yeSgKICAgICAgICBwYXRoLmpvaW4oZGlyZWN0b3J5LnBhdGgsICdzZXJ2ZXInKSwKICAgICAgKS4uY3JlYXRlU3luYygpOwogICAgICBGaWxlKAogICAgICAgIHBhdGguam9pbihzZXJ2ZXIucGF0aCwgJ3B1YnNwZWMueWFtbCcpLAogICAgICApLndyaXRlQXNTdHJpbmdTeW5jKHdvcmtzcGFjZUNoaWxkKTsKICAgICAgZmluYWwgZXhpdENhbGxzID0gPGludD5bXTsKICAgICAgYXdhaXQgcHJlX2dlbi5wcmVHZW4oCiAgICAgICAgY29udGV4dCwKICAgICAgICBidWlsZENvbmZpZ3VyYXRpb246IChfKSA9PiBjb25maWd1cmF0aW9uLAogICAgICAgIGV4aXQ6IGV4aXRDYWxscy5hZGQsCiAgICAgICAgZGlyZWN0b3J5OiBzZXJ2ZXIsCiAgICAgICAgcnVuUHJvY2Vzczogc3VjY2Vzc1J1blByb2Nlc3MsCiAgICAgICAgY29weVBhdGg6IChfLCBfXykgYXN5bmMge30sCiAgICAgICk7CgogICAgICBleHBlY3QoZXhpdENhbGxzLCBpc0VtcHR5KTsKICAgICAgZGlyZWN0b3J5LmRlbGV0ZShyZWN1cnNpdmU6IHRydWUpLmlnbm9yZSgpOwogICAgfSk7CgogICAgdGVzdCgnd29ya3Mgd2l0aCBleHRlcm5hbCBkZXBlbmRlbmNpZXMnLCAoKSBhc3luYyB7CiAgICAgIGNvbnN0IGNvbmZpZ3VyYXRpb24gPSBSb3V0ZUNvbmZpZ3VyYXRpb24oCiAgICAgICAgbWlkZGxld2FyZTogW10sCiAgICAgICAgZGlyZWN0b3JpZXM6IFtdLAogICAgICAgIHJvdXRlczogW10sCiAgICAgICAgcm9ndWVSb3V0ZXM6IFtdLAogICAgICAgIGVuZHBvaW50czoge30sCiAgICAgICk7CgogICAgICBmaW5hbCBkaXJlY3RvcnkgPSBEaXJlY3Rvcnkuc3lzdGVtVGVtcC5jcmVhdGVUZW1wU3luYygpOwogICAgICBGaWxlKAogICAgICAgIHBhdGguam9pbihkaXJlY3RvcnkucGF0aCwgJ3B1YnNwZWMueWFtbCcpLAogICAgICApLndyaXRlQXNTdHJpbmdTeW5jKGZvb1BhdGgpOwogICAgICBmaW5hbCBleGl0Q2FsbHMgPSA8aW50PltdOwogICAgICBhd2FpdCBwcmVfZ2VuLnByZUdlbigKICAgICAgICBjb250ZXh0LAogICAgICAgIGJ1aWxkQ29uZmlndXJhdGlvbjogKF8pID0+IGNvbmZpZ3VyYXRpb24sCiAgICAgICAgZXhpdDogZXhpdENhbGxzLmFkZCwKICAgICAgICBkaXJlY3Rvcnk6IGRpcmVjdG9yeSwKICAgICAgICBydW5Qcm9jZXNzOiBzdWNjZXNzUnVuUHJvY2VzcywKICAgICAgICBjb3B5UGF0aDogKF8sIF9fKSBhc3luYyB7fSwKICAgICAgKTsKCiAgICAgIGV4cGVjdChleGl0Q2FsbHMsIGlzRW1wdHkpOwogICAgICBkaXJlY3RvcnkuZGVsZXRlKHJlY3Vyc2l2ZTogdHJ1ZSkuaWdub3JlKCk7CiAgICB9KTsKCiAgICB0ZXN0KCdyZXRhaW5zIGludm9rZUN1c3RvbUVudHJ5cG9pbnQgKHRydWUpJywgKCkgYXN5bmMgewogICAgICBjb25zdCBjb25maWd1cmF0aW9uID0gUm91dGVDb25maWd1cmF0aW9uKAogICAgICAgIG1pZGRsZXdhcmU6IFtdLAogICAgICAgIGRpcmVjdG9yaWVzOiBbXSwKICAgICAgICByb3V0ZXM6IFtdLAogICAgICAgIHJvZ3VlUm91dGVzOiBbXSwKICAgICAgICBlbmRwb2ludHM6IHt9LAogICAgICAgIGludm9rZUN1c3RvbUVudHJ5cG9pbnQ6IHRydWUsCiAgICAgICk7CiAgICAgIGZpbmFsIGV4aXRDYWxscyA9IDxpbnQ+W107CiAgICAgIGF3YWl0IHByZV9nZW4ucHJlR2VuKAogICAgICAgIGNvbnRleHQsCiAgICAgICAgYnVpbGRDb25maWd1cmF0aW9uOiAoXykgPT4gY29uZmlndXJhdGlvbiwKICAgICAgICBleGl0OiBleGl0Q2FsbHMuYWRkLAogICAgICAgIHJ1blByb2Nlc3M6IHN1Y2Nlc3NSdW5Qcm9jZXNzLAogICAgICApOwogICAgICBleHBlY3QoZXhpdENhbGxzLCBpc0VtcHR5KTsKICAgICAgdmVyaWZ5TmV2ZXIoKCkgPT4gbG9nZ2VyLmVycihhbnkoKSkpOwogICAgICBleHBlY3QoCiAgICAgICAgY29udGV4dC52YXJzLAogICAgICAgIGVxdWFscyh7CiAgICAgICAgICAnZGlyZWN0b3JpZXMnOiA8Um91dGVEaXJlY3Rvcnk+W10sCiAgICAgICAgICAncm91dGVzJzogPFJvdXRlRmlsZT5bXSwKICAgICAgICAgICdtaWRkbGV3YXJlJzogPE1pZGRsZXdhcmVGaWxlPltdLAogICAgICAgICAgJ2dsb2JhbE1pZGRsZXdhcmUnOiBmYWxzZSwKICAgICAgICAgICdzZXJ2ZVN0YXRpY0ZpbGVzJzogZmFsc2UsCiAgICAgICAgICAnaW52b2tlQ3VzdG9tRW50cnlwb2ludCc6IHRydWUsCiAgICAgICAgICAnaW52b2tlQ3VzdG9tSW5pdCc6IGZhbHNlLAogICAgICAgICAgJ3BhdGhEZXBlbmRlbmNpZXMnOiA8U3RyaW5nPltdLAogICAgICAgICAgJ2hhc0V4dGVybmFsRGVwZW5kZW5jaWVzJzogZmFsc2UsCiAgICAgICAgICAnZGFydFZlcnNpb24nOiAnc3RhYmxlJywKICAgICAgICAgICdhZGREb2NrZXJmaWxlJzogdHJ1ZSwKICAgICAgICB9KSwKICAgICAgKTsKICAgIH0pOwoKICAgIHRlc3QoImRvbid0IGNyZWF0ZSB0aGUgZG9ja2VyZmlsZSBpZiBvbmUgYWxyZWFkeSBleGlzdHMgb24gdGhlIGZvbGRlci4iLAogICAgICAgICgpIGFzeW5jIHsKICAgICAgY29uc3QgY29uZmlndXJhdGlvbiA9IFJvdXRlQ29uZmlndXJhdGlvbigKICAgICAgICBtaWRkbGV3YXJlOiBbXSwKICAgICAgICBkaXJlY3RvcmllczogW10sCiAgICAgICAgcm91dGVzOiBbXSwKICAgICAgICByb2d1ZVJvdXRlczogW10sCiAgICAgICAgZW5kcG9pbnRzOiB7fSwKICAgICAgKTsKCiAgICAgIGZpbmFsIGRpcmVjdG9yeSA9IERpcmVjdG9yeS5zeXN0ZW1UZW1wLmNyZWF0ZVRlbXBTeW5jKCk7CiAgICAgIEZpbGUocGF0aC5qb2luKGRpcmVjdG9yeS5wYXRoLCAncHVic3BlYy55YW1sJykpLndyaXRlQXNTdHJpbmdTeW5jKAogICAgICAgICcnJwpuYW1lOiBleGFtcGxlCnZlcnNpb246IDAuMS4wCmVudmlyb25tZW50OgogIHNkazogXjIuMTcuMApkZXBlbmRlbmNpZXM6CiAgbWFzb246IGFueQogIHRlc3Q6IGFueQonJycsCiAgICAgICk7CgogICAgICBGaWxlKHBhdGguam9pbihkaXJlY3RvcnkucGF0aCwgJ3B1YnNwZWMubG9jaycpKS53cml0ZUFzU3RyaW5nU3luYygKICAgICAgICBub1BhdGhEZXBlbmRlbmNpZXMsCiAgICAgICk7CiAgICAgIEZpbGUocGF0aC5qb2luKGRpcmVjdG9yeS5wYXRoLCAnRG9ja2VyZmlsZScpKS53cml0ZUFzU3RyaW5nU3luYygKICAgICAgICAnJywKICAgICAgKTsKCiAgICAgIGZpbmFsIGV4aXRDYWxscyA9IDxpbnQ+W107CiAgICAgIGF3YWl0IHByZV9nZW4ucHJlR2VuKAogICAgICAgIGNvbnRleHQsCiAgICAgICAgYnVpbGRDb25maWd1cmF0aW9uOiAoXykgPT4gY29uZmlndXJhdGlvbiwKICAgICAgICBleGl0OiBleGl0Q2FsbHMuYWRkLAogICAgICAgIGRpcmVjdG9yeTogZGlyZWN0b3J5LAogICAgICAgIHJ1blByb2Nlc3M6IHN1Y2Nlc3NSdW5Qcm9jZXNzLAogICAgICApOwoKICAgICAgZXhwZWN0KAogICAgICAgIGNvbnRleHQudmFycywKICAgICAgICBlcXVhbHMoewogICAgICAgICAgJ2RpcmVjdG9yaWVzJzogPFJvdXRlRGlyZWN0b3J5PltdLAogICAgICAgICAgJ3JvdXRlcyc6IDxSb3V0ZUZpbGU+W10sCiAgICAgICAgICAnbWlkZGxld2FyZSc6IDxNaWRkbGV3YXJlRmlsZT5bXSwKICAgICAgICAgICdnbG9iYWxNaWRkbGV3YXJlJzogZmFsc2UsCiAgICAgICAgICAnc2VydmVTdGF0aWNGaWxlcyc6IGZhbHNlLAogICAgICAgICAgJ2ludm9rZUN1c3RvbUVudHJ5cG9pbnQnOiBmYWxzZSwKICAgICAgICAgICdpbnZva2VDdXN0b21Jbml0JzogZmFsc2UsCiAgICAgICAgICAnaGFzRXh0ZXJuYWxEZXBlbmRlbmNpZXMnOiBmYWxzZSwKICAgICAgICAgICdwYXRoRGVwZW5kZW5jaWVzJzogPFN0cmluZz5bXSwKICAgICAgICAgICdkYXJ0VmVyc2lvbic6ICdzdGFibGUnLAogICAgICAgICAgJ2FkZERvY2tlcmZpbGUnOiBmYWxzZSwKICAgICAgICB9KSwKICAgICAgKTsKICAgICAgZGlyZWN0b3J5LmRlbGV0ZShyZWN1cnNpdmU6IHRydWUpLmlnbm9yZSgpOwogICAgfSk7CgogICAgdGVzdCgncmV0YWlucyBpbnZva2VDdXN0b21Jbml0ICh0cnVlKScsICgpIGFzeW5jIHsKICAgICAgY29uc3QgY29uZmlndXJhdGlvbiA9IFJvdXRlQ29uZmlndXJhdGlvbigKICAgICAgICBtaWRkbGV3YXJlOiBbXSwKICAgICAgICBkaXJlY3RvcmllczogW10sCiAgICAgICAgcm91dGVzOiBbXSwKICAgICAgICByb2d1ZVJvdXRlczogW10sCiAgICAgICAgZW5kcG9pbnRzOiB7fSwKICAgICAgICBpbnZva2VDdXN0b21Jbml0OiB0cnVlLAogICAgICApOwogICAgICBmaW5hbCBleGl0Q2FsbHMgPSA8aW50PltdOwogICAgICBhd2FpdCBwcmVfZ2VuLnByZUdlbigKICAgICAgICBjb250ZXh0LAogICAgICAgIGJ1aWxkQ29uZmlndXJhdGlvbjogKF8pID0+IGNvbmZpZ3VyYXRpb24sCiAgICAgICAgZXhpdDogZXhpdENhbGxzLmFkZCwKICAgICAgICBydW5Qcm9jZXNzOiBzdWNjZXNzUnVuUHJvY2VzcywKICAgICAgKTsKICAgICAgZXhwZWN0KGV4aXRDYWxscywgaXNFbXB0eSk7CiAgICAgIHZlcmlmeU5ldmVyKCgpID0+IGxvZ2dlci5lcnIoYW55KCkpKTsKICAgICAgZXhwZWN0KAogICAgICAgIGNvbnRleHQudmFycywKICAgICAgICBlcXVhbHMoewogICAgICAgICAgJ2RpcmVjdG9yaWVzJzogPFJvdXRlRGlyZWN0b3J5PltdLAogICAgICAgICAgJ3JvdXRlcyc6IDxSb3V0ZUZpbGU+W10sCiAgICAgICAgICAnbWlkZGxld2FyZSc6IDxNaWRkbGV3YXJlRmlsZT5bXSwKICAgICAgICAgICdnbG9iYWxNaWRkbGV3YXJlJzogZmFsc2UsCiAgICAgICAgICAnc2VydmVTdGF0aWNGaWxlcyc6IGZhbHNlLAogICAgICAgICAgJ2ludm9rZUN1c3RvbUVudHJ5cG9pbnQnOiBmYWxzZSwKICAgICAgICAgICdpbnZva2VDdXN0b21Jbml0JzogdHJ1ZSwKICAgICAgICAgICdoYXNFeHRlcm5hbERlcGVuZGVuY2llcyc6IGZhbHNlLAogICAgICAgICAgJ3BhdGhEZXBlbmRlbmNpZXMnOiA8U3RyaW5nPltdLAogICAgICAgICAgJ2RhcnRWZXJzaW9uJzogJ3N0YWJsZScsCiAgICAgICAgICAnYWRkRG9ja2VyZmlsZSc6IHRydWUsCiAgICAgICAgfSksCiAgICAgICk7CiAgICB9KTsKCiAgICB0ZXN0KAogICAgICAndXBkYXRlcyBjb250ZXh0LnZhcnMgd2hlbiBidWlsZFJvdXRlQ29uZmlndXJhdGlvbiBzdWNjZWVkcycsCiAgICAgICgpIGFzeW5jIHsKICAgICAgICBjb25zdCBjb25maWd1cmF0aW9uID0gUm91dGVDb25maWd1cmF0aW9uKAogICAgICAgICAgZ2xvYmFsTWlkZGxld2FyZTogTWlkZGxld2FyZUZpbGUoCiAgICAgICAgICAgIG5hbWU6ICdtaWRkbGV3YXJlJywKICAgICAgICAgICAgcGF0aDogJ21pZGRsZXdhcmUuZGFydCcsCiAgICAgICAgICApLAogICAgICAgICAgbWlkZGxld2FyZTogWwogICAgICAgICAgICBNaWRkbGV3YXJlRmlsZSgKICAgICAgICAgICAgICBuYW1lOiAnaGVsbG9fbWlkZGxld2FyZScsCiAgICAgICAgICAgICAgcGF0aDogJ2hlbGxvL21pZGRsZXdhcmUuZGFydCcsCiAgICAgICAgICAgICksCiAgICAgICAgICBdLAogICAgICAgICAgZGlyZWN0b3JpZXM6IFsKICAgICAgICAgICAgUm91dGVEaXJlY3RvcnkoCiAgICAgICAgICAgICAgbmFtZTogJ18nLAogICAgICAgICAgICAgIHJvdXRlOiAnLycsCiAgICAgICAgICAgICAgbWlkZGxld2FyZTogW10sCiAgICAgICAgICAgICAgZmlsZXM6IFsKICAgICAgICAgICAgICAgIFJvdXRlRmlsZSgKICAgICAgICAgICAgICAgICAgbmFtZTogJ2luZGV4JywKICAgICAgICAgICAgICAgICAgcGF0aDogJ2luZGV4LmRhcnQnLAogICAgICAgICAgICAgICAgICByb3V0ZTogJy8nLAogICAgICAgICAgICAgICAgICBwYXJhbXM6IFtdLAogICAgICAgICAgICAgICAgICB3aWxkY2FyZDogZmFsc2UsCiAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgUm91dGVGaWxlKAogICAgICAgICAgICAgICAgICBuYW1lOiAnaGVsbG8nLAogICAgICAgICAgICAgICAgICBwYXRoOiAnaGVsbG8uZGFydCcsCiAgICAgICAgICAgICAgICAgIHJvdXRlOiAnL2hlbGxvJywKICAgICAgICAgICAgICAgICAgcGFyYW1zOiBbXSwKICAgICAgICAgICAgICAgICAgd2lsZGNhcmQ6IGZhbHNlLAogICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgIHBhcmFtczogW10sCiAgICAgICAgICAgICksCiAgICAgICAgICBdLAogICAgICAgICAgcm91dGVzOiBbCiAgICAgICAgICAgIFJvdXRlRmlsZSgKICAgICAgICAgICAgICBuYW1lOiAnaW5kZXgnLAogICAgICAgICAgICAgIHBhdGg6ICdpbmRleC5kYXJ0JywKICAgICAgICAgICAgICByb3V0ZTogJy8nLAogICAgICAgICAgICAgIHBhcmFtczogW10sCiAgICAgICAgICAgICAgd2lsZGNhcmQ6IGZhbHNlLAogICAgICAgICAgICApLAogICAgICAgICAgICBSb3V0ZUZpbGUoCiAgICAgICAgICAgICAgbmFtZTogJ2hlbGxvJywKICAgICAgICAgICAgICBwYXRoOiAnaGVsbG8uZGFydCcsCiAgICAgICAgICAgICAgcm91dGU6ICcvaGVsbG8nLAogICAgICAgICAgICAgIHBhcmFtczogW10sCiAgICAgICAgICAgICAgd2lsZGNhcmQ6IGZhbHNlLAogICAgICAgICAgICApLAogICAgICAgICAgXSwKICAgICAgICAgIHJvZ3VlUm91dGVzOiBbXSwKICAgICAgICAgIGVuZHBvaW50czogewogICAgICAgICAgICAnLyc6IFsKICAgICAgICAgICAgICBSb3V0ZUZpbGUoCiAgICAgICAgICAgICAgICBuYW1lOiAnaW5kZXgnLAogICAgICAgICAgICAgICAgcGF0aDogJ2luZGV4LmRhcnQnLAogICAgICAgICAgICAgICAgcm91dGU6ICcvJywKICAgICAgICAgICAgICAgIHBhcmFtczogW10sCiAgICAgICAgICAgICAgICB3aWxkY2FyZDogZmFsc2UsCiAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgJy9oZWxsbyc6IFsKICAgICAgICAgICAgICBSb3V0ZUZpbGUoCiAgICAgICAgICAgICAgICBuYW1lOiAnaGVsbG8nLAogICAgICAgICAgICAgICAgcGF0aDogJ2hlbGxvLmRhcnQnLAogICAgICAgICAgICAgICAgcm91dGU6ICcvaGVsbG8nLAogICAgICAgICAgICAgICAgcGFyYW1zOiBbXSwKICAgICAgICAgICAgICAgIHdpbGRjYXJkOiBmYWxzZSwKICAgICAgICAgICAgICApLAogICAgICAgICAgICBdLAogICAgICAgICAgfSwKICAgICAgICAgIHNlcnZlU3RhdGljRmlsZXM6IHRydWUsCiAgICAgICAgKTsKICAgICAgICBmaW5hbCBleGl0Q2FsbHMgPSA8aW50PltdOwogICAgICAgIGF3YWl0IHByZV9nZW4ucHJlR2VuKAogICAgICAgICAgY29udGV4dCwKICAgICAgICAgIGJ1aWxkQ29uZmlndXJhdGlvbjogKF8pID0+IGNvbmZpZ3VyYXRpb24sCiAgICAgICAgICBleGl0OiBleGl0Q2FsbHMuYWRkLAogICAgICAgICAgcnVuUHJvY2Vzczogc3VjY2Vzc1J1blByb2Nlc3MsCiAgICAgICAgKTsKICAgICAgICBleHBlY3QoZXhpdENhbGxzLCBpc0VtcHR5KTsKICAgICAgICB2ZXJpZnlOZXZlcigoKSA9PiBsb2dnZXIuZXJyKGFueSgpKSk7CiAgICAgICAgZXhwZWN0KAogICAgICAgICAgY29udGV4dC52YXJzLAogICAgICAgICAgZXF1YWxzKHsKICAgICAgICAgICAgJ2RpcmVjdG9yaWVzJzogWwogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICduYW1lJzogJ18nLAogICAgICAgICAgICAgICAgJ3JvdXRlJzogJy8nLAogICAgICAgICAgICAgICAgJ21pZGRsZXdhcmUnOiA8TWFwPFN0cmluZywgZHluYW1pYz4+W10sCiAgICAgICAgICAgICAgICAnZmlsZXMnOiBbCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAnbmFtZSc6ICdpbmRleCcsCiAgICAgICAgICAgICAgICAgICAgJ3BhdGgnOiAnaW5kZXguZGFydCcsCiAgICAgICAgICAgICAgICAgICAgJ3JvdXRlJzogJy8nLAogICAgICAgICAgICAgICAgICAgICdmaWxlX3BhcmFtcyc6IGNvbnN0IDxTdHJpbmc+W10sCiAgICAgICAgICAgICAgICAgICAgJ3dpbGRjYXJkJzogZmFsc2UsCiAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAnbmFtZSc6ICdoZWxsbycsCiAgICAgICAgICAgICAgICAgICAgJ3BhdGgnOiAnaGVsbG8uZGFydCcsCiAgICAgICAgICAgICAgICAgICAgJ3JvdXRlJzogJy9oZWxsbycsCiAgICAgICAgICAgICAgICAgICAgJ2ZpbGVfcGFyYW1zJzogY29uc3QgPFN0cmluZz5bXSwKICAgICAgICAgICAgICAgICAgICAnd2lsZGNhcmQnOiBmYWxzZSwKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICdkaXJlY3RvcnlfcGFyYW1zJzogY29uc3QgPFN0cmluZz5bXSwKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICdyb3V0ZXMnOiBbCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJ25hbWUnOiAnaW5kZXgnLAogICAgICAgICAgICAgICAgJ3BhdGgnOiAnaW5kZXguZGFydCcsCiAgICAgICAgICAgICAgICAncm91dGUnOiAnLycsCiAgICAgICAgICAgICAgICAnZmlsZV9wYXJhbXMnOiBjb25zdCA8U3RyaW5nPltdLAogICAgICAgICAgICAgICAgJ3dpbGRjYXJkJzogZmFsc2UsCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAnbmFtZSc6ICdoZWxsbycsCiAgICAgICAgICAgICAgICAncGF0aCc6ICdoZWxsby5kYXJ0JywKICAgICAgICAgICAgICAgICdyb3V0ZSc6ICcvaGVsbG8nLAogICAgICAgICAgICAgICAgJ2ZpbGVfcGFyYW1zJzogY29uc3QgPFN0cmluZz5bXSwKICAgICAgICAgICAgICAgICd3aWxkY2FyZCc6IGZhbHNlLAogICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgJ21pZGRsZXdhcmUnOiBbCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJ25hbWUnOiAnaGVsbG9fbWlkZGxld2FyZScsCiAgICAgICAgICAgICAgICAncGF0aCc6ICdoZWxsby9taWRkbGV3YXJlLmRhcnQnLAogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICdnbG9iYWxNaWRkbGV3YXJlJzogewogICAgICAgICAgICAgICduYW1lJzogJ21pZGRsZXdhcmUnLAogICAgICAgICAgICAgICdwYXRoJzogJ21pZGRsZXdhcmUuZGFydCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICdzZXJ2ZVN0YXRpY0ZpbGVzJzogdHJ1ZSwKICAgICAgICAgICAgJ2ludm9rZUN1c3RvbUVudHJ5cG9pbnQnOiBmYWxzZSwKICAgICAgICAgICAgJ2ludm9rZUN1c3RvbUluaXQnOiBmYWxzZSwKICAgICAgICAgICAgJ2hhc0V4dGVybmFsRGVwZW5kZW5jaWVzJzogZmFsc2UsCiAgICAgICAgICAgICdwYXRoRGVwZW5kZW5jaWVzJzogPFN0cmluZz5bXSwKICAgICAgICAgICAgJ2RhcnRWZXJzaW9uJzogJ3N0YWJsZScsCiAgICAgICAgICAgICdhZGREb2NrZXJmaWxlJzogdHJ1ZSwKICAgICAgICAgIH0pLAogICAgICAgICk7CiAgICAgIH0sCiAgICApOwogIH0pOwp9Cg==", + "type": "text" + }, + { + "path": "build/test/pubspecs.dart", + "data": + "Ly8vIEFuIGFydGlmaWNpYWxseSBjcmFmdGVkIGBwdWJzcGVjLnlhbWxgIGZpbGUgd2l0aDoKLy8vCi8vLyAqIEEgZGlyZWN0IG1haW4gcGF0aCBkZXBlbmRlbmN5IHRoYXQgaXMgbm90IGEgY2hpbGQgb2YgdGhlIHByb2plY3QKLy8vIGRpcmVjdG9yeS4KLy8vICogQSBkaXJlY3QgbWFpbiBwYXRoIGRlcGVuZGVuY3kgdGhhdCBpcyBub3QgYSBjaGlsZCBvZiB0aGUgcHJvamVjdAovLy8gZGlyZWN0b3J5IGFuZCBoYXMgYSBkaWZmZXJlbnQgcGFja2FnZSBuYW1lIHRoYW4gdGhlIGRpcmVjdG9yeSBuYW1lLgovLy8gKiBBIGRpcmVjdCBtYWluIGRlcGVuZGVuY3kgdGhhdCBpcyBob3N0ZWQuCi8vLyAqIEEgZGlyZWN0IGRldiBtYWluIGRlcGVuZGVuY3kgdGhhdCBpcyBob3N0ZWQuCi8vLyAqIEEgZGlyZWN0IG92ZXJyaWRkZW4gZGVwZW5kZW5jeSBmcm9tIGdpdC4KY29uc3QgZm9vUGF0aCA9ICcnJwpuYW1lOiBfCmRlcGVuZGVuY2llczoKICBmb286CiAgICBwYXRoOiAuLi8uLi9mb28KICBmb28yOgogICAgcGF0aDogLi4vLi4vZm9vMgogIGRpcmVjdF9tYWluOiBeMC4xLjAtZGV2LjUwCmRldl9kZXBlbmRlbmNpZXM6CiAgdGVzdDogXjEuMC4wCmRlcGVuZGVuY3lfb3ZlcnJpZGVzOgogIGRpcmVjdF9vdmVycmlkZGVuOgogICAgZ2l0OgogICAgICB1cmw6IGh0dHBzOi8vZ2l0aHViLmNvbS9hbGVzdGlhZ28vbWFzb24KICAgICAgcGF0aDogcGFja2FnZXMvbWFzb24KICAgICAgcmVmOiA3MmMzMDZhOGQ4YWJmMzA2YjVkMDI0Zjk1YWFjMjliYTVmZDk2NTc3CicnJzsKCi8vLyBBbiBhcnRpZmljaWFsbHkgY3JhZnRlZCBgcHVic3BlYy55YW1sYCBmaWxlIHdpdGg6Ci8vLwovLy8gKiBBIGRpcmVjdCBtYWluIHBhdGggZGVwZW5kZW5jeSB0aGF0IGlzIG5vdCBhIGNoaWxkIG9mIHRoZSBwcm9qZWN0Ci8vLyBkaXJlY3RvcnkuCi8vLyAqIEEgZGlyZWN0IG1haW4gcGF0aCBkZXBlbmRlbmN5IHRoYXQgaXMgYSBjaGlsZCBvZiB0aGUgcHJvamVjdCBkaXJlY3RvcnkuCi8vLyAqIEEgZGlyZWN0IG1haW4gZGVwZW5kZW5jeSB0aGF0IGlzIGhvc3RlZC4KLy8vICogQSBkaXJlY3QgZGV2IG1haW4gZGVwZW5kZW5jeSB0aGF0IGlzIGhvc3RlZC4KY29uc3QgZm9vUGF0aFdpdGhJbnRlcm5hbERlcGVuZGVuY3kgPSAnJycKbmFtZTogXwpkZXBlbmRlbmNpZXM6CiAgZm9vOgogICAgcGF0aDogLi4vLi4vZm9vCiAgYmFyOgogICAgcGF0aDogcGFja2FnZXMvYmFyCiAgbWFzb246IF4wLjEuMC1kZXYuNTAKZGV2X2RlcGVuZGVuY2llczoKICB0ZXN0OiBeMS4wLjAKJycnOwoKLy8vIEFuIGFydGlmaWNpYWxseSBjcmFmdGVkIGBwdWJzcGVjLnlhbWxgIGZpbGUgd2l0aDoKLy8vCi8vLyAqIEEgZGlyZWN0IG1haW4gZGVwZW5kZW5jeSB0aGF0IGlzIGhvc3RlZC4KLy8vICogQSBkaXJlY3QgZGV2IG1haW4gZGVwZW5kZW5jeSB0aGF0IGlzIGhvc3RlZC4KY29uc3Qgbm9QYXRoRGVwZW5kZW5jaWVzID0gJycnCm5hbWU6IF8KZGVwZW5kZW5jaWVzOgogIG1hc29uOiBeMC4xLjAtZGV2LjUwCmRldl9kZXBlbmRlbmNpZXM6CiAgdGVzdDogXjEuMC4wCicnJzsKCi8vLyBBbiBhcnRpZmljaWFsbHkgY3JhZnRlZCBgcHVic3BlYy55YW1sYCBmaWxlIHdpdGg6Ci8vLwovLy8gKiBBIGRpcmVjdCBtYWluIHBhdGggZGVwZW5kZW5jeSB0aGF0IGlzIGEgY2hpbGQgb2YgdGhlIHByb2plY3QgZGlyZWN0b3J5LgovLy8gKiBEYXJ0IHdvcmtzcGFjZXMgZW5hYmxlZApjb25zdCB3b3Jrc3BhY2VSb290ID0gJycnCm5hbWU6IF8KZGVwZW5kZW5jaWVzOgogIHNlcnZlcjoKICAgIHBhdGg6IHBhY2thZ2VzL3NlcnZlciAgCndvcmtzcGFjZToKICAtIHBhY2thZ2VzL3NlcnZlcgonJyc7CgovLy8gQW4gYXJ0aWZpY2lhbGx5IGNyYWZ0ZWQgYHB1YnNwZWMueWFtbGAgZmlsZSB3aXRoOgovLy8KLy8vICogRGFydCB3b3Jrc3BhY2VzIGVuYWJsZWQKY29uc3Qgd29ya3NwYWNlQ2hpbGQgPSAnJycKbmFtZTogc2VydmVyCnJlc29sdXRpb246IHdvcmtzcGFjZQonJyc7Cg==", + "type": "text" + }, + { + "path": "build/test/src/copy_workspace_pubspec_lock_test.dart", + "data": + "aW1wb3J0ICdkYXJ0OmlvJzsKCmltcG9ydCAncGFja2FnZTpkYXJ0X2Zyb2dfcHJvZF9zZXJ2ZXJfaG9va3MvZGFydF9mcm9nX3Byb2Rfc2VydmVyX2hvb2tzLmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6bWFzb24vbWFzb24uZGFydCc7CmltcG9ydCAncGFja2FnZTptb2NrdGFpbC9tb2NrdGFpbC5kYXJ0JzsKaW1wb3J0ICdwYWNrYWdlOnBhdGgvcGF0aC5kYXJ0JyBhcyBwYXRoOwppbXBvcnQgJ3BhY2thZ2U6dGVzdC90ZXN0LmRhcnQnOwoKY2xhc3MgX01vY2tIb29rQ29udGV4dCBleHRlbmRzIE1vY2sgaW1wbGVtZW50cyBIb29rQ29udGV4dCB7fQoKY2xhc3MgX01vY2tMb2dnZXIgZXh0ZW5kcyBNb2NrIGltcGxlbWVudHMgTG9nZ2VyIHt9Cgp2b2lkIG1haW4oKSB7CiAgZ3JvdXAoJ2NvcHlXb3Jrc3BhY2VQdWJzcGVjTG9jaycsICgpIHsKICAgIGxhdGUgTGlzdDxpbnQ+IGV4aXRDYWxsczsKICAgIGxhdGUgSG9va0NvbnRleHQgY29udGV4dDsKICAgIGxhdGUgTG9nZ2VyIGxvZ2dlcjsKICAgIGxhdGUgRGlyZWN0b3J5IGJ1aWxkRGlyZWN0b3J5OwogICAgbGF0ZSBEaXJlY3Rvcnkgd29ya2luZ0RpcmVjdG9yeTsKCiAgICBzZXRVcCgoKSB7CiAgICAgIGV4aXRDYWxscyA9IFtdOwogICAgICBjb250ZXh0ID0gX01vY2tIb29rQ29udGV4dCgpOwogICAgICBsb2dnZXIgPSBfTW9ja0xvZ2dlcigpOwogICAgICBidWlsZERpcmVjdG9yeSA9IERpcmVjdG9yeS5zeXN0ZW1UZW1wLmNyZWF0ZVRlbXBTeW5jKCdidWlsZCcpOwogICAgICB3b3JraW5nRGlyZWN0b3J5ID0gRGlyZWN0b3J5LnN5c3RlbVRlbXAuY3JlYXRlVGVtcFN5bmMoJ3dvcmtpbmcnKTsKCiAgICAgIHdoZW4oKCkgPT4gY29udGV4dC5sb2dnZXIpLnRoZW5SZXR1cm4obG9nZ2VyKTsKCiAgICAgIGFkZFRlYXJEb3duKCgpIHsKICAgICAgICBidWlsZERpcmVjdG9yeS5kZWxldGUoKS5pZ25vcmUoKTsKICAgICAgICB3b3JraW5nRGlyZWN0b3J5LmRlbGV0ZSgpLmlnbm9yZSgpOwogICAgICB9KTsKICAgIH0pOwoKICAgIHRlc3QoJ2V4aXRzIHdpdGggZXJyb3Igd2hlbiB1bmFibGUgdG8gZGV0ZXJtaW5lIHRoZSB3b3Jrc3BhY2Ugcm9vdCcsICgpIHsKICAgICAgY29weVdvcmtzcGFjZVB1YnNwZWNMb2NrKAogICAgICAgIGNvbnRleHQsCiAgICAgICAgYnVpbGREaXJlY3Rvcnk6IGJ1aWxkRGlyZWN0b3J5LnBhdGgsCiAgICAgICAgd29ya2luZ0RpcmVjdG9yeTogd29ya2luZ0RpcmVjdG9yeS5wYXRoLAogICAgICAgIGV4aXQ6IGV4aXRDYWxscy5hZGQsCiAgICAgICk7CiAgICAgIGV4cGVjdChleGl0Q2FsbHMsIGVxdWFscyhbMV0pKTsKICAgICAgdmVyaWZ5KAogICAgICAgICgpID0+IGxvZ2dlci5lcnIoCiAgICAgICAgICAnVW5hYmxlIHRvIGRldGVybWluZSB3b3Jrc3BhY2Ugcm9vdCBmb3IgJHt3b3JraW5nRGlyZWN0b3J5LnBhdGh9JywKICAgICAgICApLAogICAgICApOwogICAgfSk7CgogICAgdGVzdCgnZXhpdHMgd2l0aCBlcnJvciB3aGVuIHVuYWJsZSB0byBwYXJzZSBwdWJzcGVjLnlhbWwnLCAoKSB7CiAgICAgIEZpbGUocGF0aC5qb2luKHdvcmtpbmdEaXJlY3RvcnkucGF0aCwgJ3B1YnNwZWMueWFtbCcpKQogICAgICAgICAgLndyaXRlQXNTdHJpbmdTeW5jKCdpbnZhbGlkIHB1YnNwZWMueWFtbCcpOwogICAgICBjb3B5V29ya3NwYWNlUHVic3BlY0xvY2soCiAgICAgICAgY29udGV4dCwKICAgICAgICBidWlsZERpcmVjdG9yeTogYnVpbGREaXJlY3RvcnkucGF0aCwKICAgICAgICB3b3JraW5nRGlyZWN0b3J5OiB3b3JraW5nRGlyZWN0b3J5LnBhdGgsCiAgICAgICAgZXhpdDogZXhpdENhbGxzLmFkZCwKICAgICAgKTsKICAgICAgZXhwZWN0KGV4aXRDYWxscywgZXF1YWxzKFsxXSkpOwogICAgICB2ZXJpZnkoCiAgICAgICAgKCkgPT4gbG9nZ2VyLmVycigKICAgICAgICAgICdVbmFibGUgdG8gZGV0ZXJtaW5lIHdvcmtzcGFjZSByb290IGZvciAke3dvcmtpbmdEaXJlY3RvcnkucGF0aH0nLAogICAgICAgICksCiAgICAgICk7CiAgICB9KTsKCiAgICB0ZXN0KCdkb2VzIG5vdGhpbmcgd2hlbiBwdWJzcGVjLmxvY2sgZG9lcyBub3QgZXhpc3QgaW4gd29ya3NwYWNlIHJvb3QnLCAoKSB7CiAgICAgIEZpbGUocGF0aC5qb2luKHdvcmtpbmdEaXJlY3RvcnkucGF0aCwgJ3B1YnNwZWMueWFtbCcpKQogICAgICAgICAgLndyaXRlQXNTdHJpbmdTeW5jKCcnJwpuYW1lOiBfCnZlcnNpb246IDAuMC4wCmVudmlyb25tZW50OgogIHNkazogXjMuOC4wCndvcmtzcGFjZToKICAtIHBhY2thZ2VzL2hlbGxvX3dvcmxkCicnJyk7CiAgICAgIGNvcHlXb3Jrc3BhY2VQdWJzcGVjTG9jaygKICAgICAgICBjb250ZXh0LAogICAgICAgIGJ1aWxkRGlyZWN0b3J5OiBidWlsZERpcmVjdG9yeS5wYXRoLAogICAgICAgIHdvcmtpbmdEaXJlY3Rvcnk6IHdvcmtpbmdEaXJlY3RvcnkucGF0aCwKICAgICAgICBleGl0OiBleGl0Q2FsbHMuYWRkLAogICAgICApOwogICAgICBleHBlY3QoZXhpdENhbGxzLCBpc0VtcHR5KTsKICAgICAgdmVyaWZ5TmV2ZXIoKCkgPT4gbG9nZ2VyLmVycihhbnkoKSkpOwogICAgICBleHBlY3QoYnVpbGREaXJlY3RvcnkubGlzdFN5bmMoKSwgaXNFbXB0eSk7CiAgICB9KTsKCiAgICB0ZXN0KCdleGl0cyB3aXRoIGVycm9yIHdoZW4gdW5hYmxlIHRvIGNvcHkgbG9ja2ZpbGUnLCAoKSB7CiAgICAgIGNvbnN0IHB1YnNwZWNMb2NrQ29udGVudHMgPSAnJycKIyBHZW5lcmF0ZWQgYnkgcHViCiMgU2VlIGh0dHBzOi8vZGFydC5kZXYvdG9vbHMvcHViL2dsb3NzYXJ5I2xvY2tmaWxlCnBhY2thZ2VzOgonJyc7CiAgICAgIEZpbGUocGF0aC5qb2luKHdvcmtpbmdEaXJlY3RvcnkucGF0aCwgJ3B1YnNwZWMueWFtbCcpKQogICAgICAgICAgLndyaXRlQXNTdHJpbmdTeW5jKCcnJwpuYW1lOiBfCnZlcnNpb246IDAuMC4wCmVudmlyb25tZW50OgogIHNkazogXjMuOC4wCndvcmtzcGFjZToKICAtIHBhY2thZ2VzL2hlbGxvX3dvcmxkCicnJyk7CiAgICAgIGZpbmFsIGZpbGUgPSBGaWxlKHBhdGguam9pbih3b3JraW5nRGlyZWN0b3J5LnBhdGgsICdwdWJzcGVjLmxvY2snKSkKICAgICAgICAuLndyaXRlQXNTdHJpbmdTeW5jKHB1YnNwZWNMb2NrQ29udGVudHMpOwogICAgICBQcm9jZXNzLnJ1blN5bmMoJ2NobW9kJywgWycwMDAnLCBmaWxlLnBhdGhdKTsKICAgICAgY29weVdvcmtzcGFjZVB1YnNwZWNMb2NrKAogICAgICAgIGNvbnRleHQsCiAgICAgICAgYnVpbGREaXJlY3Rvcnk6IGJ1aWxkRGlyZWN0b3J5LnBhdGgsCiAgICAgICAgd29ya2luZ0RpcmVjdG9yeTogd29ya2luZ0RpcmVjdG9yeS5wYXRoLAogICAgICAgIGV4aXQ6IGV4aXRDYWxscy5hZGQsCiAgICAgICk7CiAgICAgIGV4cGVjdChleGl0Q2FsbHMsIGVxdWFscyhbMV0pKTsKICAgICAgdmVyaWZ5KAogICAgICAgICgpID0+IGxvZ2dlci5lcnIoYW55KHRoYXQ6IGNvbnRhaW5zKCdQZXJtaXNzaW9uIGRlbmllZCcpKSksCiAgICAgICk7CiAgICB9KTsKCiAgICB0ZXN0KCdjb3BpZXMgcHVic3BlYy5sb2NrIHRvIGJ1aWxkIGRpcmVjdG9yeSB3aGVuIGZvdW5kJywgKCkgewogICAgICBjb25zdCBwdWJzcGVjTG9ja0NvbnRlbnRzID0gJycnCiMgR2VuZXJhdGVkIGJ5IHB1YgojIFNlZSBodHRwczovL2RhcnQuZGV2L3Rvb2xzL3B1Yi9nbG9zc2FyeSNsb2NrZmlsZQpwYWNrYWdlczoKJycnOwogICAgICBGaWxlKHBhdGguam9pbih3b3JraW5nRGlyZWN0b3J5LnBhdGgsICdwdWJzcGVjLnlhbWwnKSkKICAgICAgICAgIC53cml0ZUFzU3RyaW5nU3luYygnJycKbmFtZTogXwp2ZXJzaW9uOiAwLjAuMAplbnZpcm9ubWVudDoKICBzZGs6IF4zLjguMAp3b3Jrc3BhY2U6CiAgLSBwYWNrYWdlcy9oZWxsb193b3JsZAonJycpOwogICAgICBGaWxlKHBhdGguam9pbih3b3JraW5nRGlyZWN0b3J5LnBhdGgsICdwdWJzcGVjLmxvY2snKSkKICAgICAgICAgIC53cml0ZUFzU3RyaW5nU3luYyhwdWJzcGVjTG9ja0NvbnRlbnRzKTsKICAgICAgY29weVdvcmtzcGFjZVB1YnNwZWNMb2NrKAogICAgICAgIGNvbnRleHQsCiAgICAgICAgYnVpbGREaXJlY3Rvcnk6IGJ1aWxkRGlyZWN0b3J5LnBhdGgsCiAgICAgICAgd29ya2luZ0RpcmVjdG9yeTogd29ya2luZ0RpcmVjdG9yeS5wYXRoLAogICAgICAgIGV4aXQ6IGV4aXRDYWxscy5hZGQsCiAgICAgICk7CiAgICAgIGV4cGVjdChleGl0Q2FsbHMsIGlzRW1wdHkpOwogICAgICB2ZXJpZnlOZXZlcigoKSA9PiBsb2dnZXIuZXJyKGFueSgpKSk7CiAgICAgIGZpbmFsIGJ1aWxkRGlyZWN0b3J5Q29udGVudHMgPSBidWlsZERpcmVjdG9yeS5saXN0U3luYygpOwogICAgICBleHBlY3QoYnVpbGREaXJlY3RvcnlDb250ZW50cywgaGFzTGVuZ3RoKDEpKTsKICAgICAgZXhwZWN0KAogICAgICAgIGJ1aWxkRGlyZWN0b3J5Q29udGVudHMuZmlyc3QsCiAgICAgICAgaXNBPEZpbGU+KCkuaGF2aW5nKAogICAgICAgICAgKGYpID0+IHBhdGguYmFzZW5hbWUoZi5wYXRoKSwKICAgICAgICAgICduYW1lJywKICAgICAgICAgICdwdWJzcGVjLmxvY2snLAogICAgICAgICksCiAgICAgICk7CiAgICAgIGV4cGVjdCgKICAgICAgICAoYnVpbGREaXJlY3RvcnlDb250ZW50cy5maXJzdCBhcyBGaWxlKS5yZWFkQXNTdHJpbmdTeW5jKCksCiAgICAgICAgZXF1YWxzKHB1YnNwZWNMb2NrQ29udGVudHMpLAogICAgICApOwogICAgfSk7CiAgfSk7Cn0K", + "type": "text" + }, + { + "path": "build/test/src/create_bundle_test.dart", + "data": + "aW1wb3J0ICdkYXJ0OmlvJzsKCmltcG9ydCAncGFja2FnZTpkYXJ0X2Zyb2dfcHJvZF9zZXJ2ZXJfaG9va3MvZGFydF9mcm9nX3Byb2Rfc2VydmVyX2hvb2tzLmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6bWFzb24vbWFzb24uZGFydCcgaGlkZSBjcmVhdGVCdW5kbGU7CmltcG9ydCAncGFja2FnZTptb2NrdGFpbC9tb2NrdGFpbC5kYXJ0JzsKaW1wb3J0ICdwYWNrYWdlOnBhdGgvcGF0aC5kYXJ0JyBhcyBwYXRoOwppbXBvcnQgJ3BhY2thZ2U6dGVzdC90ZXN0LmRhcnQnOwoKY2xhc3MgX01vY2tMb2dnZXIgZXh0ZW5kcyBNb2NrIGltcGxlbWVudHMgTG9nZ2VyIHt9CgpjbGFzcyBfTW9ja1Byb2dyZXNzIGV4dGVuZHMgTW9jayBpbXBsZW1lbnRzIFByb2dyZXNzIHt9CgpjbGFzcyBfRmFrZUhvb2tDb250ZXh0IGV4dGVuZHMgRmFrZSBpbXBsZW1lbnRzIEhvb2tDb250ZXh0IHsKICBfRmFrZUhvb2tDb250ZXh0KHtMb2dnZXI/IGxvZ2dlcn0pIDogX2xvZ2dlciA9IGxvZ2dlciA/PyBfTW9ja0xvZ2dlcigpOwoKICBmaW5hbCBMb2dnZXIgX2xvZ2dlcjsKCiAgdmFyIF92YXJzID0gPFN0cmluZywgZHluYW1pYz57fTsKCiAgQG92ZXJyaWRlCiAgTWFwPFN0cmluZywgZHluYW1pYz4gZ2V0IHZhcnMgPT4gX3ZhcnM7CgogIEBvdmVycmlkZQogIHNldCB2YXJzKE1hcDxTdHJpbmcsIGR5bmFtaWM+IHZhbHVlKSA9PiBfdmFycyA9IHZhbHVlOwoKICBAb3ZlcnJpZGUKICBMb2dnZXIgZ2V0IGxvZ2dlciA9PiBfbG9nZ2VyOwp9Cgp2b2lkIG1haW4oKSB7CiAgZ3JvdXAoJ2NyZWF0ZUJ1bmRsZScsICgpIHsKICAgIGxhdGUgSG9va0NvbnRleHQgY29udGV4dDsKICAgIGxhdGUgTG9nZ2VyIGxvZ2dlcjsKCiAgICBzZXRVcCgoKSB7CiAgICAgIGxvZ2dlciA9IF9Nb2NrTG9nZ2VyKCk7CiAgICAgIGNvbnRleHQgPSBfRmFrZUhvb2tDb250ZXh0KGxvZ2dlcjogbG9nZ2VyKTsKCiAgICAgIHdoZW4oKCkgPT4gbG9nZ2VyLnByb2dyZXNzKGFueSgpKSkudGhlblJldHVybihfTW9ja1Byb2dyZXNzKCkpOwogICAgfSk7CgogICAgdGVzdCgnZXhpdCgxKSBpZiBidW5kbGluZyB0aHJvd3MnLCAoKSBhc3luYyB7CiAgICAgIGZpbmFsIGV4aXRDYWxscyA9IDxpbnQ+W107CiAgICAgIGF3YWl0IGNyZWF0ZUJ1bmRsZSgKICAgICAgICBjb250ZXh0OiBjb250ZXh0LAogICAgICAgIHByb2plY3REaXJlY3Rvcnk6IERpcmVjdG9yeSgnL2ludmFsaWQvZGlyJyksCiAgICAgICAgYnVpbGREaXJlY3Rvcnk6IERpcmVjdG9yeSgnL2ludmFsaWQvZGlyL2J1aWxkJyksCiAgICAgICAgZXhpdDogZXhpdENhbGxzLmFkZCwKICAgICAgKTsKICAgICAgZXhwZWN0KGV4aXRDYWxscywgZXF1YWxzKFsxXSkpOwogICAgICB2ZXJpZnkoKCkgPT4gbG9nZ2VyLmVycihhbnkoKSkpLmNhbGxlZCgxKTsKICAgIH0pOwoKICAgIHRlc3QoJ2RvZXMgbm90IHRocm93IHdoZW4gYnVuZGxpbmcgc3VjY2VlZHMnLCAoKSBhc3luYyB7CiAgICAgIGZpbmFsIGV4aXRDYWxscyA9IDxpbnQ+W107CiAgICAgIGZpbmFsIHByb2plY3REaXJlY3RvcnkgPSBEaXJlY3Rvcnkuc3lzdGVtVGVtcC5jcmVhdGVUZW1wU3luYygpOwogICAgICBmaW5hbCBkb3REYXJ0RnJvZ0RpciA9CiAgICAgICAgICBEaXJlY3RvcnkocGF0aC5qb2luKHByb2plY3REaXJlY3RvcnkucGF0aCwgJy5kYXJ0X2Zyb2cnKSkKICAgICAgICAgICAgLi5jcmVhdGVTeW5jKCk7CiAgICAgIGZpbmFsIGJ1aWxkRGlyZWN0b3J5ID0KICAgICAgICAgIERpcmVjdG9yeShwYXRoLmpvaW4ocHJvamVjdERpcmVjdG9yeS5wYXRoLCAnYnVpbGQnKSkuLmNyZWF0ZVN5bmMoKTsKICAgICAgZmluYWwgb2xkQnVpbGRBcnRpZmFjdCA9CiAgICAgICAgICBGaWxlKHBhdGguam9pbihidWlsZERpcmVjdG9yeS5wYXRoLCAnYXJ0aWZhY3QudHh0JykpLi5jcmVhdGVTeW5jKCk7CgogICAgICBhd2FpdCBjcmVhdGVCdW5kbGUoCiAgICAgICAgY29udGV4dDogY29udGV4dCwKICAgICAgICBwcm9qZWN0RGlyZWN0b3J5OiBwcm9qZWN0RGlyZWN0b3J5LAogICAgICAgIGJ1aWxkRGlyZWN0b3J5OiBidWlsZERpcmVjdG9yeSwKICAgICAgICBleGl0OiBleGl0Q2FsbHMuYWRkLAogICAgICApOwoKICAgICAgZXhwZWN0KGRvdERhcnRGcm9nRGlyLmV4aXN0c1N5bmMoKSwgaXNGYWxzZSk7CiAgICAgIGV4cGVjdChidWlsZERpcmVjdG9yeS5leGlzdHNTeW5jKCksIGlzVHJ1ZSk7CiAgICAgIGV4cGVjdChvbGRCdWlsZEFydGlmYWN0LmV4aXN0c1N5bmMoKSwgaXNGYWxzZSk7CiAgICAgIGV4cGVjdChleGl0Q2FsbHMsIGlzRW1wdHkpOwogICAgICB2ZXJpZnlOZXZlcigoKSA9PiBsb2dnZXIuZXJyKGFueSgpKSk7CiAgICB9KTsKICB9KTsKfQo=", + "type": "text" + }, + { + "path": "build/test/src/create_external_packages_folder_test.dart", + "data": + "aW1wb3J0ICdkYXJ0OmlvJzsKCmltcG9ydCAncGFja2FnZTpkYXJ0X2Zyb2dfcHJvZF9zZXJ2ZXJfaG9va3MvZGFydF9mcm9nX3Byb2Rfc2VydmVyX2hvb2tzLmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6cGF0aC9wYXRoLmRhcnQnIGFzIHBhdGg7CmltcG9ydCAncGFja2FnZTp0ZXN0L3Rlc3QuZGFydCc7CgppbXBvcnQgJy4uL3B1YnNwZWNzLmRhcnQnOwoKdm9pZCBtYWluKCkgewogIGdyb3VwKCdjcmVhdGVFeHRlcm5hbFBhY2thZ2VzRm9sZGVyJywgKCkgewogICAgdGVzdCgnYnVuZGxlcyBleHRlcm5hbCBkZXBlbmRlbmNpZXMgd2l0aCBleHRlcm5hbCBkZXBlbmRlbmNpZXMnLCAoKSBhc3luYyB7CiAgICAgIGZpbmFsIHByb2plY3REaXJlY3RvcnkgPSBEaXJlY3Rvcnkuc3lzdGVtVGVtcC5jcmVhdGVUZW1wU3luYygpOwogICAgICBGaWxlKHBhdGguam9pbihwcm9qZWN0RGlyZWN0b3J5LnBhdGgsICdwdWJzcGVjLnlhbWwnKSkKICAgICAgICAgIC53cml0ZUFzU3RyaW5nU3luYyhmb29QYXRoKTsKICAgICAgZmluYWwgY29weUNhbGxzID0gPFN0cmluZz5bXTsKCiAgICAgIGF3YWl0IGNyZWF0ZUV4dGVybmFsUGFja2FnZXNGb2xkZXIoCiAgICAgICAgcHJvamVjdERpcmVjdG9yeTogcHJvamVjdERpcmVjdG9yeSwKICAgICAgICBidWlsZERpcmVjdG9yeTogRGlyZWN0b3J5KHBhdGguam9pbihwcm9qZWN0RGlyZWN0b3J5LnBhdGgsICdidWlsZCcpKSwKICAgICAgICBjb3B5UGF0aDogKGZyb20sIHRvKSBhc3luYyA9PiBjb3B5Q2FsbHMuYWRkKCckZnJvbSAtPiAkdG8nKSwKICAgICAgKTsKCiAgICAgIGZpbmFsIGZvb1BhY2thZ2VEaXJlY3RvcnkgPSBwYXRoLmpvaW4ocHJvamVjdERpcmVjdG9yeS5wYXRoLCAnLi4vLi4vZm9vJyk7CiAgICAgIGZpbmFsIGZvb1BhY2thZ2VEaXJlY3RvcnlUYXJnZXQgPSBwYXRoLmpvaW4oCiAgICAgICAgcHJvamVjdERpcmVjdG9yeS5wYXRoLAogICAgICAgICdidWlsZCcsCiAgICAgICAgJy5kYXJ0X2Zyb2dfcGF0aF9kZXBlbmRlbmNpZXMnLAogICAgICAgICdmb28nLAogICAgICApOwoKICAgICAgZmluYWwgZm9vMlBhY2thZ2VEaXJlY3RvcnkgPQogICAgICAgICAgcGF0aC5qb2luKHByb2plY3REaXJlY3RvcnkucGF0aCwgJy4uLy4uL2ZvbzInKTsKICAgICAgZmluYWwgZm9vMlBhY2thZ2VEaXJlY3RvcnlUYXJnZXQgPSBwYXRoLmpvaW4oCiAgICAgICAgcHJvamVjdERpcmVjdG9yeS5wYXRoLAogICAgICAgICdidWlsZCcsCiAgICAgICAgJy5kYXJ0X2Zyb2dfcGF0aF9kZXBlbmRlbmNpZXMnLAogICAgICAgICdmb28yJywKICAgICAgKTsKCiAgICAgIGV4cGVjdChjb3B5Q2FsbHMsIFsKICAgICAgICAnJGZvb1BhY2thZ2VEaXJlY3RvcnkgLT4gJGZvb1BhY2thZ2VEaXJlY3RvcnlUYXJnZXQnLAogICAgICAgICckZm9vMlBhY2thZ2VEaXJlY3RvcnkgLT4gJGZvbzJQYWNrYWdlRGlyZWN0b3J5VGFyZ2V0JywKICAgICAgXSk7CiAgICB9KTsKCiAgICB0ZXN0KCdkb2VzIG5vdCBidW5kbGUgaW50ZXJuYWwgcGF0aCBkZXBlbmRlbmNpZXMnLCAoKSBhc3luYyB7CiAgICAgIGZpbmFsIHByb2plY3REaXJlY3RvcnkgPSBEaXJlY3Rvcnkuc3lzdGVtVGVtcC5jcmVhdGVUZW1wU3luYygpOwogICAgICBGaWxlKAogICAgICAgIHBhdGguam9pbihwcm9qZWN0RGlyZWN0b3J5LnBhdGgsICdwdWJzcGVjLnlhbWwnKSwKICAgICAgKS53cml0ZUFzU3RyaW5nU3luYyhmb29QYXRoV2l0aEludGVybmFsRGVwZW5kZW5jeSk7CiAgICAgIGZpbmFsIGNvcHlDYWxscyA9IDxTdHJpbmc+W107CgogICAgICBhd2FpdCBjcmVhdGVFeHRlcm5hbFBhY2thZ2VzRm9sZGVyKAogICAgICAgIHByb2plY3REaXJlY3Rvcnk6IHByb2plY3REaXJlY3RvcnksCiAgICAgICAgYnVpbGREaXJlY3Rvcnk6IERpcmVjdG9yeShwYXRoLmpvaW4ocHJvamVjdERpcmVjdG9yeS5wYXRoLCAnYnVpbGQnKSksCiAgICAgICAgY29weVBhdGg6IChmcm9tLCB0bykgYXN5bmMgPT4gY29weUNhbGxzLmFkZCgnJGZyb20gLT4gJHRvJyksCiAgICAgICk7CgogICAgICBmaW5hbCBmcm9tID0gcGF0aC5qb2luKHByb2plY3REaXJlY3RvcnkucGF0aCwgJy4uLy4uL2ZvbycpOwogICAgICBmaW5hbCB0byA9IHBhdGguam9pbigKICAgICAgICBwcm9qZWN0RGlyZWN0b3J5LnBhdGgsCiAgICAgICAgJ2J1aWxkJywKICAgICAgICAnLmRhcnRfZnJvZ19wYXRoX2RlcGVuZGVuY2llcycsCiAgICAgICAgJ2ZvbycsCiAgICAgICk7CiAgICAgIGV4cGVjdChjb3B5Q2FsbHMsIFsnJGZyb20gLT4gJHRvJ10pOwogICAgfSk7CiAgfSk7Cn0K", + "type": "text" + }, + { + "path": "build/test/src/dart_pub_get_test.dart", + "data": + "aW1wb3J0ICdkYXJ0OmlvJzsKCmltcG9ydCAncGFja2FnZTpkYXJ0X2Zyb2dfcHJvZF9zZXJ2ZXJfaG9va3MvZGFydF9mcm9nX3Byb2Rfc2VydmVyX2hvb2tzLmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6bWFzb24vbWFzb24uZGFydCc7CmltcG9ydCAncGFja2FnZTptb2NrdGFpbC9tb2NrdGFpbC5kYXJ0JzsKaW1wb3J0ICdwYWNrYWdlOnRlc3QvdGVzdC5kYXJ0JzsKCmNsYXNzIF9GYWtlSG9va0NvbnRleHQgZXh0ZW5kcyBGYWtlIGltcGxlbWVudHMgSG9va0NvbnRleHQgewogIF9GYWtlSG9va0NvbnRleHQoe0xvZ2dlcj8gbG9nZ2VyfSkgOiBfbG9nZ2VyID0gbG9nZ2VyID8/IF9Nb2NrTG9nZ2VyKCk7CgogIGZpbmFsIExvZ2dlciBfbG9nZ2VyOwoKICB2YXIgX3ZhcnMgPSA8U3RyaW5nLCBkeW5hbWljPnt9OwoKICBAb3ZlcnJpZGUKICBNYXA8U3RyaW5nLCBkeW5hbWljPiBnZXQgdmFycyA9PiBfdmFyczsKCiAgQG92ZXJyaWRlCiAgc2V0IHZhcnMoTWFwPFN0cmluZywgZHluYW1pYz4gdmFsdWUpID0+IF92YXJzID0gdmFsdWU7CgogIEBvdmVycmlkZQogIExvZ2dlciBnZXQgbG9nZ2VyID0+IF9sb2dnZXI7Cn0KCmNsYXNzIF9Nb2NrTG9nZ2VyIGV4dGVuZHMgTW9jayBpbXBsZW1lbnRzIExvZ2dlciB7fQoKY2xhc3MgX01vY2tQcm9ncmVzcyBleHRlbmRzIE1vY2sgaW1wbGVtZW50cyBQcm9ncmVzcyB7fQoKdm9pZCBtYWluKCkgewogIGdyb3VwKCdkYXJ0UHViR2V0JywgKCkgewogICAgbGF0ZSBIb29rQ29udGV4dCBjb250ZXh0OwogICAgbGF0ZSBMb2dnZXIgbG9nZ2VyOwoKICAgIGNvbnN0IHByb2Nlc3NJZCA9IDQyOwogICAgZmluYWwgcHJvY2Vzc1Jlc3VsdCA9IFByb2Nlc3NSZXN1bHQoCiAgICAgIHByb2Nlc3NJZCwKICAgICAgRXhpdENvZGUuc3VjY2Vzcy5jb2RlLAogICAgICAnJywKICAgICAgJycsCiAgICApOwoKICAgIHNldFVwKCgpIHsKICAgICAgbG9nZ2VyID0gX01vY2tMb2dnZXIoKTsKICAgICAgY29udGV4dCA9IF9GYWtlSG9va0NvbnRleHQobG9nZ2VyOiBsb2dnZXIpOwoKICAgICAgd2hlbigoKSA9PiBsb2dnZXIucHJvZ3Jlc3MoYW55KCkpKS50aGVuUmV0dXJuKF9Nb2NrUHJvZ3Jlc3MoKSk7CiAgICB9KTsKCiAgICB0ZXN0KCdjb21wbGV0ZXMgd2hlbiBwcm9jZXNzIHN1Y2NlZWRzJywgKCkgYXN5bmMgewogICAgICBmaW5hbCBleGl0Q2FsbHMgPSA8aW50PltdOwoKICAgICAgYXdhaXQgZGFydFB1YkdldCgKICAgICAgICBjb250ZXh0LAogICAgICAgIHdvcmtpbmdEaXJlY3Rvcnk6ICcuJywKICAgICAgICBydW5Qcm9jZXNzOiAoCiAgICAgICAgICBleGVjdXRhYmxlLAogICAgICAgICAgYXJncywgewogICAgICAgICAgU3RyaW5nPyB3b3JraW5nRGlyZWN0b3J5LAogICAgICAgICAgYm9vbD8gcnVuSW5TaGVsbCwKICAgICAgICB9KSBhc3luYyB7CiAgICAgICAgICBleHBlY3QoZXhlY3V0YWJsZSwgZXF1YWxzKCdkYXJ0JykpOwogICAgICAgICAgZXhwZWN0KGFyZ3MsIGVxdWFscyhbJ3B1YicsICdnZXQnXSkpOwogICAgICAgICAgZXhwZWN0KHdvcmtpbmdEaXJlY3RvcnksIGVxdWFscygnLicpKTsKICAgICAgICAgIGV4cGVjdChydW5JblNoZWxsLCBpc1RydWUpOwogICAgICAgICAgcmV0dXJuIHByb2Nlc3NSZXN1bHQ7CiAgICAgICAgfSwKICAgICAgICBleGl0OiBleGl0Q2FsbHMuYWRkLAogICAgICApOwogICAgICBleHBlY3QoZXhpdENhbGxzLCBpc0VtcHR5KTsKICAgICAgdmVyaWZ5TmV2ZXIoKCkgPT4gbG9nZ2VyLmVycihhbnkoKSkpOwogICAgfSk7CgogICAgdGVzdCgnZXhpdHMgd2hlbiBwcm9jZXNzIGZhaWxzJywgKCkgYXN5bmMgewogICAgICBjb25zdCBlcnJvciA9ICdvb3BzIHNvbWV0aGluZyB3ZW50IHdyb25nJzsKICAgICAgZmluYWwgZXhpdENhbGxzID0gPGludD5bXTsKCiAgICAgIGZpbmFsIHByb2Nlc3NSZXN1bHQgPSBQcm9jZXNzUmVzdWx0KAogICAgICAgIHByb2Nlc3NJZCwKICAgICAgICBFeGl0Q29kZS5zb2Z0d2FyZS5jb2RlLAogICAgICAgICcnLAogICAgICAgIGVycm9yLAogICAgICApOwoKICAgICAgYXdhaXQgZGFydFB1YkdldCgKICAgICAgICBjb250ZXh0LAogICAgICAgIHdvcmtpbmdEaXJlY3Rvcnk6ICcuJywKICAgICAgICBydW5Qcm9jZXNzOiAoCiAgICAgICAgICBleGVjdXRhYmxlLAogICAgICAgICAgYXJncywgewogICAgICAgICAgU3RyaW5nPyB3b3JraW5nRGlyZWN0b3J5LAogICAgICAgICAgYm9vbD8gcnVuSW5TaGVsbCwKICAgICAgICB9KSBhc3luYyB7CiAgICAgICAgICByZXR1cm4gcHJvY2Vzc1Jlc3VsdDsKICAgICAgICB9LAogICAgICAgIGV4aXQ6IGV4aXRDYWxscy5hZGQsCiAgICAgICk7CiAgICAgIGV4cGVjdChleGl0Q2FsbHMsIGVxdWFscyhbRXhpdENvZGUuc29mdHdhcmUuY29kZV0pKTsKICAgICAgdmVyaWZ5KCgpID0+IGxvZ2dlci5lcnIoZXJyb3IpKS5jYWxsZWQoMSk7CiAgICB9KTsKCiAgICB0ZXN0KCdleGl0cyB3aGVuIFByb2Nlc3NFeGNlcHRpb24gb2NjdXJzJywgKCkgYXN5bmMgewogICAgICBjb25zdCBlcnJvciA9ICdvb3BzIHNvbWV0aGluZyB3ZW50IHdyb25nJzsKICAgICAgZmluYWwgZXhpdENhbGxzID0gPGludD5bXTsKICAgICAgYXdhaXQgZGFydFB1YkdldCgKICAgICAgICBjb250ZXh0LAogICAgICAgIHdvcmtpbmdEaXJlY3Rvcnk6ICcuJywKICAgICAgICBydW5Qcm9jZXNzOiAoCiAgICAgICAgICBleGVjdXRhYmxlLAogICAgICAgICAgYXJncywgewogICAgICAgICAgU3RyaW5nPyB3b3JraW5nRGlyZWN0b3J5LAogICAgICAgICAgYm9vbD8gcnVuSW5TaGVsbCwKICAgICAgICB9KSBhc3luYyB7CiAgICAgICAgICB0aHJvdyBQcm9jZXNzRXhjZXB0aW9uKAogICAgICAgICAgICAnZGFydCcsCiAgICAgICAgICAgIFsncHViJywgJ2dldCddLAogICAgICAgICAgICBlcnJvciwKICAgICAgICAgICAgRXhpdENvZGUuc29mdHdhcmUuY29kZSwKICAgICAgICAgICk7CiAgICAgICAgfSwKICAgICAgICBleGl0OiBleGl0Q2FsbHMuYWRkLAogICAgICApOwogICAgICBleHBlY3QoZXhpdENhbGxzLCBlcXVhbHMoW0V4aXRDb2RlLnNvZnR3YXJlLmNvZGVdKSk7CiAgICAgIHZlcmlmeSgoKSA9PiBsb2dnZXIuZXJyKGVycm9yKSkuY2FsbGVkKDEpOwogICAgfSk7CiAgfSk7Cn0K", + "type": "text" + }, + { + "path": "build/test/src/disable_workspace_resolution_test.dart", + "data": + "aW1wb3J0ICdkYXJ0OmlvJzsKCmltcG9ydCAncGFja2FnZTpkYXJ0X2Zyb2dfcHJvZF9zZXJ2ZXJfaG9va3MvZGFydF9mcm9nX3Byb2Rfc2VydmVyX2hvb2tzLmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6bWFzb24vbWFzb24uZGFydCc7CmltcG9ydCAncGFja2FnZTptb2NrdGFpbC9tb2NrdGFpbC5kYXJ0JzsKaW1wb3J0ICdwYWNrYWdlOnBhdGgvcGF0aC5kYXJ0JyBhcyBwYXRoOwppbXBvcnQgJ3BhY2thZ2U6dGVzdC90ZXN0LmRhcnQnOwoKY2xhc3MgX01vY2tIb29rQ29udGV4dCBleHRlbmRzIE1vY2sgaW1wbGVtZW50cyBIb29rQ29udGV4dCB7fQoKY2xhc3MgX01vY2tMb2dnZXIgZXh0ZW5kcyBNb2NrIGltcGxlbWVudHMgTG9nZ2VyIHt9Cgp2b2lkIG1haW4oKSB7CiAgZ3JvdXAoJ2Rpc2FibGVXb3Jrc3BhY2VSZXNvbHV0aW9uJywgKCkgewogICAgbGF0ZSBMaXN0PGludD4gZXhpdENhbGxzOwogICAgbGF0ZSBIb29rQ29udGV4dCBjb250ZXh0OwogICAgbGF0ZSBMb2dnZXIgbG9nZ2VyOwogICAgbGF0ZSBEaXJlY3RvcnkgYnVpbGREaXJlY3Rvcnk7CgogICAgc2V0VXAoKCkgewogICAgICBleGl0Q2FsbHMgPSBbXTsKICAgICAgY29udGV4dCA9IF9Nb2NrSG9va0NvbnRleHQoKTsKICAgICAgbG9nZ2VyID0gX01vY2tMb2dnZXIoKTsKICAgICAgYnVpbGREaXJlY3RvcnkgPSBEaXJlY3Rvcnkuc3lzdGVtVGVtcC5jcmVhdGVUZW1wU3luYygnYnVpbGQnKTsKCiAgICAgIHdoZW4oKCkgPT4gY29udGV4dC5sb2dnZXIpLnRoZW5SZXR1cm4obG9nZ2VyKTsKCiAgICAgIGFkZFRlYXJEb3duKCgpID0+IGJ1aWxkRGlyZWN0b3J5LmRlbGV0ZSgpLmlnbm9yZSgpKTsKICAgIH0pOwoKICAgIGdyb3VwKCd3aGVuIHB1YnNwZWNfb3ZlcnJpZGVzLnlhbWwgZG9lcyBub3QgZXhpc3QnLCAoKSB7CiAgICAgIHRlc3QoJ2FkZHMgcmVzb2x1dGlvbjogbnVsbCcsICgpIHsKICAgICAgICBkaXNhYmxlV29ya3NwYWNlUmVzb2x1dGlvbigKICAgICAgICAgIGNvbnRleHQsCiAgICAgICAgICBidWlsZERpcmVjdG9yeTogYnVpbGREaXJlY3RvcnkucGF0aCwKICAgICAgICAgIGV4aXQ6IGV4aXRDYWxscy5hZGQsCiAgICAgICAgKTsKICAgICAgICBmaW5hbCBidWlsZERpcmVjdG9yeUNvbnRlbnRzID0gYnVpbGREaXJlY3RvcnkubGlzdFN5bmMoKTsKICAgICAgICBleHBlY3QoYnVpbGREaXJlY3RvcnlDb250ZW50cywgaGFzTGVuZ3RoKDEpKTsKICAgICAgICBmaW5hbCBwdWJzcGVjT3ZlcnJpZGVzID0gYnVpbGREaXJlY3RvcnlDb250ZW50cy5maXJzdCBhcyBGaWxlOwogICAgICAgIGV4cGVjdChwdWJzcGVjT3ZlcnJpZGVzLnJlYWRBc1N0cmluZ1N5bmMoKSwgZXF1YWxzKCcnJwoKcmVzb2x1dGlvbjogbnVsbAonJycpKTsKICAgICAgfSk7CiAgICB9KTsKCiAgICBncm91cCgnd2hlbiBwdWJzcGVjX292ZXJyaWRlcy55YW1sIGV4aXN0cycsICgpIHsKICAgICAgY29uc3Qgb3JpZ2luYWxQdWJzcGVjT3ZlcnJpZGVzQ29udGVudCA9ICcnJwpkZXBlbmRlbmN5X292ZXJyaWRlczoKICBmb286CiAgICBwYXRoOiAuL3BhdGgvdG8vZm9vJycnOwoKICAgICAgc2V0VXAoKCkgewogICAgICAgIEZpbGUocGF0aC5qb2luKGJ1aWxkRGlyZWN0b3J5LnBhdGgsICdwdWJzcGVjX292ZXJyaWRlcy55YW1sJykpCiAgICAgICAgICAgIC53cml0ZUFzU3RyaW5nU3luYyhvcmlnaW5hbFB1YnNwZWNPdmVycmlkZXNDb250ZW50KTsKICAgICAgfSk7CgogICAgICB0ZXN0KCdhZGRzIHJlc29sdXRpb246IG51bGwnLCAoKSB7CiAgICAgICAgZGlzYWJsZVdvcmtzcGFjZVJlc29sdXRpb24oCiAgICAgICAgICBjb250ZXh0LAogICAgICAgICAgYnVpbGREaXJlY3Rvcnk6IGJ1aWxkRGlyZWN0b3J5LnBhdGgsCiAgICAgICAgICBleGl0OiBleGl0Q2FsbHMuYWRkLAogICAgICAgICk7CiAgICAgICAgZmluYWwgYnVpbGREaXJlY3RvcnlDb250ZW50cyA9IGJ1aWxkRGlyZWN0b3J5Lmxpc3RTeW5jKCk7CiAgICAgICAgZXhwZWN0KGJ1aWxkRGlyZWN0b3J5Q29udGVudHMsIGhhc0xlbmd0aCgxKSk7CiAgICAgICAgZmluYWwgcHVic3BlY092ZXJyaWRlcyA9IGJ1aWxkRGlyZWN0b3J5Q29udGVudHMuZmlyc3QgYXMgRmlsZTsKICAgICAgICBleHBlY3QocHVic3BlY092ZXJyaWRlcy5yZWFkQXNTdHJpbmdTeW5jKCksIGVxdWFscygnJycKJG9yaWdpbmFsUHVic3BlY092ZXJyaWRlc0NvbnRlbnQKcmVzb2x1dGlvbjogbnVsbAonJycpKTsKICAgICAgfSk7CiAgICB9KTsKCiAgICBncm91cCgnd2hlbiB1bmFibGUgdG8gcmVhZCBwdWJzcGVjX292ZXJyaWRlcycsICgpIHsKICAgICAgc2V0VXAoKCkgewogICAgICAgIGZpbmFsIHB1YnNwZWNPdmVycmlkZXMgPSBGaWxlKAogICAgICAgICAgcGF0aC5qb2luKGJ1aWxkRGlyZWN0b3J5LnBhdGgsICdwdWJzcGVjX292ZXJyaWRlcy55YW1sJyksCiAgICAgICAgKS4uY3JlYXRlU3luYygpOwogICAgICAgIFByb2Nlc3MucnVuU3luYygnY2htb2QnLCBbJzAwMCcsIHB1YnNwZWNPdmVycmlkZXMucGF0aF0pOwogICAgICB9KTsKCiAgICAgIHRlc3QoJ2V4aXRzIHdpdGggZXJyb3InLCAoKSB7CiAgICAgICAgZGlzYWJsZVdvcmtzcGFjZVJlc29sdXRpb24oCiAgICAgICAgICBjb250ZXh0LAogICAgICAgICAgYnVpbGREaXJlY3Rvcnk6IGJ1aWxkRGlyZWN0b3J5LnBhdGgsCiAgICAgICAgICBleGl0OiBleGl0Q2FsbHMuYWRkLAogICAgICAgICk7CiAgICAgICAgZmluYWwgYnVpbGREaXJlY3RvcnlDb250ZW50cyA9IGJ1aWxkRGlyZWN0b3J5Lmxpc3RTeW5jKCk7CiAgICAgICAgZXhwZWN0KGJ1aWxkRGlyZWN0b3J5Q29udGVudHMsIGhhc0xlbmd0aCgxKSk7CiAgICAgICAgZXhwZWN0KGV4aXRDYWxscywgZXF1YWxzKFsxXSkpOwogICAgICAgIHZlcmlmeSgKICAgICAgICAgICgpID0+IGxvZ2dlci5lcnIoYW55KHRoYXQ6IGNvbnRhaW5zKCdQZXJtaXNzaW9uIGRlbmllZCcpKSksCiAgICAgICAgKS5jYWxsZWQoMSk7CiAgICAgIH0pOwogICAgfSk7CiAgfSk7Cn0K", + "type": "text" + }, + { + "path": "build/test/src/exit_overrides_test.dart", + "data": + "aW1wb3J0ICdkYXJ0OmlvJzsKCmltcG9ydCAncGFja2FnZTpkYXJ0X2Zyb2dfcHJvZF9zZXJ2ZXJfaG9va3MvZGFydF9mcm9nX3Byb2Rfc2VydmVyX2hvb2tzLmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6dGVzdC90ZXN0LmRhcnQnOwoKdm9pZCBtYWluKCkgewogIGdyb3VwKCdFeGl0T3ZlcnJpZGVzJywgKCkgewogICAgZ3JvdXAoJ3J1blpvbmVkJywgKCkgewogICAgICB0ZXN0KCd1c2VzIGRlZmF1bHQgZXhpdCB3aGVuIG5vdCBzcGVjaWZpZWQnLCAoKSB7CiAgICAgICAgRXhpdE92ZXJyaWRlcy5ydW5ab25lZCgoKSB7CiAgICAgICAgICBmaW5hbCBvdmVycmlkZXMgPSBFeGl0T3ZlcnJpZGVzLmN1cnJlbnQ7CiAgICAgICAgICBleHBlY3Qob3ZlcnJpZGVzIS5leGl0LCBlcXVhbHMoZXhpdCkpOwogICAgICAgIH0pOwogICAgICB9KTsKCiAgICAgIHRlc3QoJ3VzZXMgY3VzdG9tIGV4aXQgd2hlbiBzcGVjaWZpZWQnLCAoKSB7CiAgICAgICAgRXhpdE92ZXJyaWRlcy5ydW5ab25lZCgKICAgICAgICAgICgpIHsKICAgICAgICAgICAgZmluYWwgb3ZlcnJpZGVzID0gRXhpdE92ZXJyaWRlcy5jdXJyZW50OwogICAgICAgICAgICBleHBlY3Qob3ZlcnJpZGVzIS5leGl0LCBpc05vdChlcXVhbHMoZXhpdCkpKTsKICAgICAgICAgIH0sCiAgICAgICAgICBleGl0OiAoXykge30sCiAgICAgICAgKTsKICAgICAgfSk7CiAgICB9KTsKICB9KTsKfQo=", + "type": "text" + }, + { + "path": "build/test/src/get_internal_path_dependencies_test.dart", + "data": + "aW1wb3J0ICdkYXJ0OmlvJzsKCmltcG9ydCAncGFja2FnZTpkYXJ0X2Zyb2dfcHJvZF9zZXJ2ZXJfaG9va3MvZGFydF9mcm9nX3Byb2Rfc2VydmVyX2hvb2tzLmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6cGF0aC9wYXRoLmRhcnQnIGFzIHBhdGg7CmltcG9ydCAncGFja2FnZTp0ZXN0L3Rlc3QuZGFydCc7Cgp2b2lkIG1haW4oKSB7CiAgZ3JvdXAoJ2dldFBhdGhEZXBlbmRlbmNpZXMnLCAoKSB7CiAgICB0ZXN0KCdyZXR1cm5zIG5vdGhpbmcgd2hlbiB0aGVyZSBhcmUgbm8gcGF0aCBkZXBlbmRlbmNpZXMnLCAoKSB7CiAgICAgIGZpbmFsIGRpcmVjdG9yeSA9IERpcmVjdG9yeS5zeXN0ZW1UZW1wLmNyZWF0ZVRlbXBTeW5jKCk7CiAgICAgIEZpbGUocGF0aC5qb2luKGRpcmVjdG9yeS5wYXRoLCAncHVic3BlYy55YW1sJykpLndyaXRlQXNTdHJpbmdTeW5jKAogICAgICAgICcnJwpuYW1lOiBfCmRlcGVuZGVuY2llczoKICB0ZXN0OiBeMS4wLjAKICBtYXNvbjogXjAuMS4wCicnJywKICAgICAgKTsKICAgICAgZXhwZWN0KGdldEludGVybmFsUGF0aERlcGVuZGVuY2llcyhkaXJlY3RvcnkpLCBjb21wbGV0aW9uKGlzRW1wdHkpKTsKICAgICAgZGlyZWN0b3J5LmRlbGV0ZShyZWN1cnNpdmU6IHRydWUpLmlnbm9yZSgpOwogICAgfSk7CgogICAgdGVzdCgncmV0dXJucyBjb3JyZWN0IHBhdGggZGVwZW5kZW5jaWVzJywgKCkgewogICAgICBmaW5hbCBkaXJlY3RvcnkgPSBEaXJlY3Rvcnkuc3lzdGVtVGVtcC5jcmVhdGVUZW1wU3luYygpOwogICAgICBGaWxlKHBhdGguam9pbihkaXJlY3RvcnkucGF0aCwgJ3B1YnNwZWMueWFtbCcpKS53cml0ZUFzU3RyaW5nU3luYygKICAgICAgICAnJycKbmFtZTogXwpkZXBlbmRlbmNpZXM6CiAgZGFydF9mcm9nOgogICAgcGF0aDogcGF0aC90by9kYXJ0X2Zyb2cKICBkYXJ0X2Zyb2dfZ2VuOgogICAgcGF0aDogcGF0aC90by9kYXJ0X2Zyb2dfZ2VuCicnJywKICAgICAgKTsKICAgICAgZXhwZWN0KAogICAgICAgIGdldEludGVybmFsUGF0aERlcGVuZGVuY2llcyhkaXJlY3RvcnkpLAogICAgICAgIGNvbXBsZXRpb24oCiAgICAgICAgICBlcXVhbHMoWydwYXRoL3RvL2RhcnRfZnJvZycsICdwYXRoL3RvL2RhcnRfZnJvZ19nZW4nXSksCiAgICAgICAgKSwKICAgICAgKTsKICAgICAgZGlyZWN0b3J5LmRlbGV0ZShyZWN1cnNpdmU6IHRydWUpLmlnbm9yZSgpOwogICAgfSk7CiAgfSk7Cn0K", + "type": "text" + }, + { + "path": "build/test/src/uses_workspace_resolution_test.dart", + "data": + "aW1wb3J0ICdkYXJ0OmlvJzsKCmltcG9ydCAncGFja2FnZTpkYXJ0X2Zyb2dfcHJvZF9zZXJ2ZXJfaG9va3MvZGFydF9mcm9nX3Byb2Rfc2VydmVyX2hvb2tzLmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6bWFzb24vbWFzb24uZGFydCc7CmltcG9ydCAncGFja2FnZTptb2NrdGFpbC9tb2NrdGFpbC5kYXJ0JzsKaW1wb3J0ICdwYWNrYWdlOnBhdGgvcGF0aC5kYXJ0JyBhcyBwYXRoOwppbXBvcnQgJ3BhY2thZ2U6dGVzdC90ZXN0LmRhcnQnOwoKY2xhc3MgX01vY2tIb29rQ29udGV4dCBleHRlbmRzIE1vY2sgaW1wbGVtZW50cyBIb29rQ29udGV4dCB7fQoKY2xhc3MgX01vY2tMb2dnZXIgZXh0ZW5kcyBNb2NrIGltcGxlbWVudHMgTG9nZ2VyIHt9Cgp2b2lkIG1haW4oKSB7CiAgZ3JvdXAoJ3VzZXNXb3Jrc3BhY2VSZXNvbHV0aW9uJywgKCkgewogICAgbGF0ZSBMaXN0PGludD4gZXhpdENhbGxzOwogICAgbGF0ZSBIb29rQ29udGV4dCBjb250ZXh0OwogICAgbGF0ZSBMb2dnZXIgbG9nZ2VyOwogICAgbGF0ZSBEaXJlY3RvcnkgYnVpbGREaXJlY3Rvcnk7CiAgICBsYXRlIERpcmVjdG9yeSB3b3JraW5nRGlyZWN0b3J5OwoKICAgIHNldFVwKCgpIHsKICAgICAgZXhpdENhbGxzID0gW107CiAgICAgIGNvbnRleHQgPSBfTW9ja0hvb2tDb250ZXh0KCk7CiAgICAgIGxvZ2dlciA9IF9Nb2NrTG9nZ2VyKCk7CiAgICAgIGJ1aWxkRGlyZWN0b3J5ID0gRGlyZWN0b3J5LnN5c3RlbVRlbXAuY3JlYXRlVGVtcFN5bmMoJ2J1aWxkJyk7CiAgICAgIHdvcmtpbmdEaXJlY3RvcnkgPSBEaXJlY3Rvcnkuc3lzdGVtVGVtcC5jcmVhdGVUZW1wU3luYygnd29ya2luZycpOwoKICAgICAgd2hlbigoKSA9PiBjb250ZXh0LmxvZ2dlcikudGhlblJldHVybihsb2dnZXIpOwoKICAgICAgYWRkVGVhckRvd24oKCkgewogICAgICAgIGJ1aWxkRGlyZWN0b3J5LmRlbGV0ZSgpLmlnbm9yZSgpOwogICAgICAgIHdvcmtpbmdEaXJlY3RvcnkuZGVsZXRlKCkuaWdub3JlKCk7CiAgICAgIH0pOwogICAgfSk7CgogICAgZ3JvdXAoJ3doZW4gcHVic3BlYy55YW1sIGRvZXMgbm90IGV4aXN0JywgKCkgewogICAgICB0ZXN0KCdyZXR1cm5zIGZhbHNlJywgKCkgewogICAgICAgIGV4cGVjdCgKICAgICAgICAgIHVzZXNXb3Jrc3BhY2VSZXNvbHV0aW9uKAogICAgICAgICAgICBjb250ZXh0LAogICAgICAgICAgICB3b3JraW5nRGlyZWN0b3J5OiB3b3JraW5nRGlyZWN0b3J5LnBhdGgsCiAgICAgICAgICAgIGV4aXQ6IGV4aXRDYWxscy5hZGQsCiAgICAgICAgICApLAogICAgICAgICAgaXNGYWxzZSwKICAgICAgICApOwogICAgICB9KTsKICAgIH0pOwoKICAgIGdyb3VwKCd3aGVuIHB1YnNwZWMueWFtbCBpcyBtYWxmb3JtZWQnLCAoKSB7CiAgICAgIHNldFVwKCgpIHsKICAgICAgICBGaWxlKAogICAgICAgICAgcGF0aC5qb2luKHdvcmtpbmdEaXJlY3RvcnkucGF0aCwgJ3B1YnNwZWMueWFtbCcpLAogICAgICAgICkud3JpdGVBc1N0cmluZ1N5bmMoJ2ludmFsaWQgcHVic3BlYy55YW1sJyk7CiAgICAgIH0pOwoKICAgICAgdGVzdCgncmV0dXJucyBmYWxzZScsICgpIHsKICAgICAgICBleHBlY3QoCiAgICAgICAgICB1c2VzV29ya3NwYWNlUmVzb2x1dGlvbigKICAgICAgICAgICAgY29udGV4dCwKICAgICAgICAgICAgd29ya2luZ0RpcmVjdG9yeTogd29ya2luZ0RpcmVjdG9yeS5wYXRoLAogICAgICAgICAgICBleGl0OiBleGl0Q2FsbHMuYWRkLAogICAgICAgICAgKSwKICAgICAgICAgIGlzRmFsc2UsCiAgICAgICAgKTsKICAgICAgICBleHBlY3QoZXhpdENhbGxzLCBlcXVhbHMoWzFdKSk7CiAgICAgICAgdmVyaWZ5KCgpID0+IGxvZ2dlci5lcnIoYW55KHRoYXQ6IGNvbnRhaW5zKCdQYXJzZWRZYW1sRXhjZXB0aW9uJykpKSk7CiAgICAgIH0pOwogICAgfSk7CgogICAgZ3JvdXAoJ3doZW4gcHVic3BlYy55YW1sIGlzIHZhbGlkIHdpdGggbm8gcmVzb2x1dGlvbicsICgpIHsKICAgICAgc2V0VXAoKCkgewogICAgICAgIEZpbGUoCiAgICAgICAgICBwYXRoLmpvaW4od29ya2luZ0RpcmVjdG9yeS5wYXRoLCAncHVic3BlYy55YW1sJyksCiAgICAgICAgKS53cml0ZUFzU3RyaW5nU3luYygnJycKbmFtZTogXwonJycpOwogICAgICB9KTsKCiAgICAgIHRlc3QoJ3JldHVybnMgZmFsc2UnLCAoKSB7CiAgICAgICAgZXhwZWN0KAogICAgICAgICAgdXNlc1dvcmtzcGFjZVJlc29sdXRpb24oCiAgICAgICAgICAgIGNvbnRleHQsCiAgICAgICAgICAgIHdvcmtpbmdEaXJlY3Rvcnk6IHdvcmtpbmdEaXJlY3RvcnkucGF0aCwKICAgICAgICAgICAgZXhpdDogZXhpdENhbGxzLmFkZCwKICAgICAgICAgICksCiAgICAgICAgICBpc0ZhbHNlLAogICAgICAgICk7CiAgICAgICAgZXhwZWN0KGV4aXRDYWxscywgaXNFbXB0eSk7CiAgICAgICAgdmVyaWZ5TmV2ZXIoKCkgPT4gbG9nZ2VyLmVycihhbnkoKSkpOwogICAgICB9KTsKICAgIH0pOwoKICAgIGdyb3VwKCd3aGVuIHB1YnNwZWMueWFtbCBpcyB2YWxpZCB3aXRoIHJlc29sdXRpb24gd29ya3NwYWNlJywgKCkgewogICAgICBzZXRVcCgoKSB7CiAgICAgICAgRmlsZSgKICAgICAgICAgIHBhdGguam9pbih3b3JraW5nRGlyZWN0b3J5LnBhdGgsICdwdWJzcGVjLnlhbWwnKSwKICAgICAgICApLndyaXRlQXNTdHJpbmdTeW5jKCcnJwpuYW1lOiBfCnJlc29sdXRpb246IHdvcmtzcGFjZQonJycpOwogICAgICB9KTsKCiAgICAgIHRlc3QoJ3JldHVybnMgdHJ1ZScsICgpIHsKICAgICAgICBleHBlY3QoCiAgICAgICAgICB1c2VzV29ya3NwYWNlUmVzb2x1dGlvbigKICAgICAgICAgICAgY29udGV4dCwKICAgICAgICAgICAgd29ya2luZ0RpcmVjdG9yeTogd29ya2luZ0RpcmVjdG9yeS5wYXRoLAogICAgICAgICAgICBleGl0OiBleGl0Q2FsbHMuYWRkLAogICAgICAgICAgKSwKICAgICAgICAgIGlzVHJ1ZSwKICAgICAgICApOwogICAgICAgIGV4cGVjdChleGl0Q2FsbHMsIGlzRW1wdHkpOwogICAgICAgIHZlcmlmeU5ldmVyKCgpID0+IGxvZ2dlci5lcnIoYW55KCkpKTsKICAgICAgfSk7CiAgICB9KTsKICB9KTsKfQo=", + "type": "text" + }, { "path": "lib/dart_frog_prod_server_hooks.dart", "data": - "ZXhwb3J0ICdzcmMvY3JlYXRlX2J1bmRsZS5kYXJ0JzsKZXhwb3J0ICdzcmMvY3JlYXRlX2V4dGVybmFsX3BhY2thZ2VzX2ZvbGRlci5kYXJ0JzsKZXhwb3J0ICdzcmMvZGFydF9wdWJfZ2V0LmRhcnQnOwpleHBvcnQgJ3NyYy9leGl0X292ZXJyaWRlcy5kYXJ0JzsKZXhwb3J0ICdzcmMvZ2V0X2ludGVybmFsX3BhdGhfZGVwZW5kZW5jaWVzLmRhcnQnOwpleHBvcnQgJ3NyYy9nZXRfcHVic3BlY19sb2NrLmRhcnQnOwo=", + "ZXhwb3J0ICdzcmMvY29weV93b3Jrc3BhY2VfcHVic3BlY19sb2NrLmRhcnQnOwpleHBvcnQgJ3NyYy9jcmVhdGVfYnVuZGxlLmRhcnQnOwpleHBvcnQgJ3NyYy9jcmVhdGVfZXh0ZXJuYWxfcGFja2FnZXNfZm9sZGVyLmRhcnQnOwpleHBvcnQgJ3NyYy9kYXJ0X3B1Yl9nZXQuZGFydCc7CmV4cG9ydCAnc3JjL2Rpc2FibGVfd29ya3NwYWNlX3Jlc29sdXRpb24uZGFydCc7CmV4cG9ydCAnc3JjL2V4aXRfb3ZlcnJpZGVzLmRhcnQnOwpleHBvcnQgJ3NyYy9nZXRfaW50ZXJuYWxfcGF0aF9kZXBlbmRlbmNpZXMuZGFydCc7CmV4cG9ydCAnc3JjL2dldF9wdWJzcGVjLmRhcnQnOwpleHBvcnQgJ3NyYy91c2VzX3dvcmtzcGFjZV9yZXNvbHV0aW9uLmRhcnQnOwo=", + "type": "text" + }, + { + "path": "lib/src/copy_workspace_pubspec_lock.dart", + "data": + "aW1wb3J0ICdkYXJ0OmlvJzsKaW1wb3J0ICdwYWNrYWdlOm1hc29uL21hc29uLmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6cGF0aC9wYXRoLmRhcnQnIGFzIHBhdGg7CmltcG9ydCAncGFja2FnZTpwdWJzcGVjX3BhcnNlL3B1YnNwZWNfcGFyc2UuZGFydCc7CgovLy8gQ29waWVzIHRoZSBwdWJzcGVjLmxvY2sgZnJvbSB0aGUgd29ya3NwYWNlIHJvb3QgaW50byB0aGUgYnVpbGQgZGlyZWN0b3J5Ci8vLyBpbiBvcmRlciB0byBlbnN1cmUgdGhlIHByb2R1Y3Rpb24gYnVpbGQgdXNlcyB0aGUgZXhhY3Qgc2FtZSB2ZXJzaW9ucyBvZiBhbGwKLy8vIGRlcGVuZGVuY2llcy4Kdm9pZCBjb3B5V29ya3NwYWNlUHVic3BlY0xvY2soCiAgSG9va0NvbnRleHQgY29udGV4dCwgewogIHJlcXVpcmVkIFN0cmluZyBidWlsZERpcmVjdG9yeSwKICByZXF1aXJlZCBTdHJpbmcgd29ya2luZ0RpcmVjdG9yeSwKICByZXF1aXJlZCB2b2lkIEZ1bmN0aW9uKGludCBleGl0Q29kZSkgZXhpdCwKfSkgewogIGZpbmFsIHdvcmtzcGFjZVJvb3QgPSBfZ2V0V29ya3NwYWNlUm9vdCh3b3JraW5nRGlyZWN0b3J5KTsKICBpZiAod29ya3NwYWNlUm9vdCA9PSBudWxsKSB7CiAgICBjb250ZXh0LmxvZ2dlci5lcnIoCiAgICAgICdVbmFibGUgdG8gZGV0ZXJtaW5lIHdvcmtzcGFjZSByb290IGZvciAkd29ya2luZ0RpcmVjdG9yeScsCiAgICApOwogICAgcmV0dXJuIGV4aXQoMSk7CiAgfQogIGZpbmFsIHB1YnNwZWNMb2NrRmlsZSA9IEZpbGUocGF0aC5qb2luKHdvcmtzcGFjZVJvb3QucGF0aCwgJ3B1YnNwZWMubG9jaycpKTsKICBpZiAoIXB1YnNwZWNMb2NrRmlsZS5leGlzdHNTeW5jKCkpIHJldHVybjsKCiAgdHJ5IHsKICAgIHB1YnNwZWNMb2NrRmlsZS5jb3B5U3luYyhwYXRoLmpvaW4oYnVpbGREaXJlY3RvcnksICdwdWJzcGVjLmxvY2snKSk7CiAgfSBvbiBFeGNlcHRpb24gY2F0Y2ggKGVycm9yKSB7CiAgICBjb250ZXh0LmxvZ2dlci5lcnIoJyRlcnJvcicpOwogICAgcmV0dXJuIGV4aXQoMSk7CiAgfQp9CgovLy8gUmV0dXJucyB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhlIG5lYXJlc3QgRGFydCB3b3Jrc3BhY2UuCkRpcmVjdG9yeT8gX2dldFdvcmtzcGFjZVJvb3QoU3RyaW5nIHdvcmtpbmdEaXJlY3RvcnkpIHsKICBmaW5hbCBmaWxlID0gX2ZpbmROZWFyZXN0QW5jZXN0b3IoCiAgICB3aGVyZTogKHBhdGgpID0+IF9nZXRXb3Jrc3BhY2VSb290UHVic3BlY1lhbWwoY3dkOiBEaXJlY3RvcnkocGF0aCkpLAogICAgY3dkOiBEaXJlY3Rvcnkod29ya2luZ0RpcmVjdG9yeSksCiAgKTsKICBpZiAoZmlsZSA9PSBudWxsIHx8ICFmaWxlLmV4aXN0c1N5bmMoKSkgcmV0dXJuIG51bGw7CiAgcmV0dXJuIERpcmVjdG9yeShwYXRoLmRpcm5hbWUoZmlsZS5wYXRoKSk7Cn0KCi8vLyBUaGUgd29ya3NwYWNlIHJvb3QgYHB1YnNwZWMueWFtbGAgZmlsZSBmb3IgdGhpcyBwcm9qZWN0LgpGaWxlPyBfZ2V0V29ya3NwYWNlUm9vdFB1YnNwZWNZYW1sKHtyZXF1aXJlZCBEaXJlY3RvcnkgY3dkfSkgewogIHRyeSB7CiAgICBmaW5hbCBwdWJzcGVjWWFtbEZpbGUgPSBGaWxlKHBhdGguam9pbihjd2QucGF0aCwgJ3B1YnNwZWMueWFtbCcpKTsKICAgIGlmICghcHVic3BlY1lhbWxGaWxlLmV4aXN0c1N5bmMoKSkgcmV0dXJuIG51bGw7CiAgICBmaW5hbCBwdWJzcGVjID0gUHVic3BlYy5wYXJzZShwdWJzcGVjWWFtbEZpbGUucmVhZEFzU3RyaW5nU3luYygpKTsKICAgIGlmIChwdWJzcGVjLndvcmtzcGFjZT8uaXNFbXB0eSA/PyB0cnVlKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBwdWJzcGVjWWFtbEZpbGU7CiAgfSBvbiBFeGNlcHRpb24gewogICAgcmV0dXJuIG51bGw7CiAgfQp9CgovLy8gRmluZHMgbmVhcmVzdCBhbmNlc3RvciBmaWxlCi8vLyByZWxhdGl2ZSB0byB0aGUgW2N3ZF0gdGhhdCBzYXRpc2ZpZXMgW3doZXJlXS4KRmlsZT8gX2ZpbmROZWFyZXN0QW5jZXN0b3IoewogIHJlcXVpcmVkIEZpbGU/IEZ1bmN0aW9uKFN0cmluZyBwYXRoKSB3aGVyZSwKICByZXF1aXJlZCBEaXJlY3RvcnkgY3dkLAp9KSB7CiAgRGlyZWN0b3J5PyBwcmV2OwogIHZhciBkaXIgPSBjd2Q7CiAgd2hpbGUgKHByZXY/LnBhdGggIT0gZGlyLnBhdGgpIHsKICAgIGZpbmFsIGZpbGUgPSB3aGVyZShkaXIucGF0aCk7CiAgICBpZiAoZmlsZT8uZXhpc3RzU3luYygpID8/IGZhbHNlKSByZXR1cm4gZmlsZTsKICAgIHByZXYgPSBkaXI7CiAgICBkaXIgPSBkaXIucGFyZW50OwogIH0KICByZXR1cm4gbnVsbDsKfQo=", "type": "text" }, { @@ -40,7 +190,7 @@ final dartFrogProdServerBundle = MasonBundle.fromJson({ { "path": "lib/src/create_external_packages_folder.dart", "data": - "aW1wb3J0ICdkYXJ0OmlvJzsKCmltcG9ydCAncGFja2FnZTpkYXJ0X2Zyb2dfcHJvZF9zZXJ2ZXJfaG9va3MvZGFydF9mcm9nX3Byb2Rfc2VydmVyX2hvb2tzLmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6aW8vaW8uZGFydCcgYXMgaW87CmltcG9ydCAncGFja2FnZTpwYXRoL3BhdGguZGFydCcgYXMgcGF0aDsKCi8vLyBTaWduYXR1cmUgb2YgW2lvLmNvcHlQYXRoXS4KdHlwZWRlZiBDb3B5UGF0aCA9IEZ1dHVyZTx2b2lkPiBGdW5jdGlvbihTdHJpbmcgZnJvbSwgU3RyaW5nIHRvKTsKCkZ1dHVyZTxMaXN0PFN0cmluZz4+IGNyZWF0ZUV4dGVybmFsUGFja2FnZXNGb2xkZXIoewogIHJlcXVpcmVkIERpcmVjdG9yeSBwcm9qZWN0RGlyZWN0b3J5LAogIHJlcXVpcmVkIERpcmVjdG9yeSBidWlsZERpcmVjdG9yeSwKICBDb3B5UGF0aCBjb3B5UGF0aCA9IGlvLmNvcHlQYXRoLAp9KSBhc3luYyB7CiAgZmluYWwgcGF0aFJlc29sdmVyID0gcGF0aC5jb250ZXh0OwogIGZpbmFsIHB1YnNwZWNMb2NrID0gYXdhaXQgZ2V0UHVic3BlY0xvY2soCiAgICBwcm9qZWN0RGlyZWN0b3J5LnBhdGgsCiAgICBwYXRoQ29udGV4dDogcGF0aC5jb250ZXh0LAogICk7CgogIGZpbmFsIGV4dGVybmFsUGF0aERlcGVuZGVuY2llcyA9IHB1YnNwZWNMb2NrLnBhY2thZ2VzCiAgICAgIC5tYXAoCiAgICAgICAgKGRlcGVuZGVuY3kpIHsKICAgICAgICAgIGZpbmFsIHBhdGhEZXNjcmlwdGlvbiA9IGRlcGVuZGVuY3kucGF0aERlc2NyaXB0aW9uOwogICAgICAgICAgaWYgKHBhdGhEZXNjcmlwdGlvbiA9PSBudWxsKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgfQoKICAgICAgICAgIGZpbmFsIGlzRXh0ZXJuYWwgPSAhcGF0aFJlc29sdmVyLmlzV2l0aGluKCcnLCBwYXRoRGVzY3JpcHRpb24ucGF0aCk7CiAgICAgICAgICBpZiAoIWlzRXh0ZXJuYWwpIHJldHVybiBudWxsOwoKICAgICAgICAgIHJldHVybiBfRXh0ZXJuYWxQYXRoRGVwZW5kZW5jeSgKICAgICAgICAgICAgbmFtZTogZGVwZW5kZW5jeS5uYW1lLAogICAgICAgICAgICBwYXRoOiBwYXRoLmpvaW4ocHJvamVjdERpcmVjdG9yeS5wYXRoLCBwYXRoRGVzY3JpcHRpb24ucGF0aCksCiAgICAgICAgICApOwogICAgICAgIH0sCiAgICAgICkKICAgICAgLndoZXJlVHlwZTxfRXh0ZXJuYWxQYXRoRGVwZW5kZW5jeT4oKQogICAgICAudG9MaXN0KCk7CgogIGlmIChleHRlcm5hbFBhdGhEZXBlbmRlbmNpZXMuaXNFbXB0eSkgewogICAgcmV0dXJuIFtdOwogIH0KCiAgZmluYWwgcGFja2FnZXNEaXJlY3RvcnkgPSBEaXJlY3RvcnkoCiAgICBwYXRoUmVzb2x2ZXIuam9pbigKICAgICAgYnVpbGREaXJlY3RvcnkucGF0aCwKICAgICAgJy5kYXJ0X2Zyb2dfcGF0aF9kZXBlbmRlbmNpZXMnLAogICAgKSwKICApLi5jcmVhdGVTeW5jKHJlY3Vyc2l2ZTogdHJ1ZSk7CgogIGZpbmFsIGNvcGllZEV4dGVybmFsUGF0aERlcGVuZGVuY2llcyA9IGF3YWl0IEZ1dHVyZS53YWl0KAogICAgZXh0ZXJuYWxQYXRoRGVwZW5kZW5jaWVzLm1hcCgKICAgICAgKGV4dGVybmFsUGF0aERlcGVuZGVuY3kpID0+IGV4dGVybmFsUGF0aERlcGVuZGVuY3kuY29weVRvKAogICAgICAgIGNvcHlQYXRoOiBjb3B5UGF0aCwKICAgICAgICB0YXJnZXREaXJlY3Rvcnk6IERpcmVjdG9yeSgKICAgICAgICAgIHBhdGhSZXNvbHZlci5qb2luKAogICAgICAgICAgICBwYWNrYWdlc0RpcmVjdG9yeS5wYXRoLAogICAgICAgICAgICBleHRlcm5hbFBhdGhEZXBlbmRlbmN5Lm5hbWUsCiAgICAgICAgICApLAogICAgICAgICksCiAgICAgICksCiAgICApLAogICk7CgogIGF3YWl0IEZpbGUoCiAgICBwYXRoUmVzb2x2ZXIuam9pbigKICAgICAgYnVpbGREaXJlY3RvcnkucGF0aCwKICAgICAgJ3B1YnNwZWNfb3ZlcnJpZGVzLnlhbWwnLAogICAgKSwKICApLndyaXRlQXNTdHJpbmcoJycnCmRlcGVuZGVuY3lfb3ZlcnJpZGVzOgoke2NvcGllZEV4dGVybmFsUGF0aERlcGVuZGVuY2llcy5tYXAoCiAgICAoZGVwZW5kZW5jeSkgewogICAgICBmaW5hbCBuYW1lID0gZGVwZW5kZW5jeS5uYW1lOwogICAgICBmaW5hbCBwYXRoID0KICAgICAgICAgIHBhdGhSZXNvbHZlci5yZWxhdGl2ZShkZXBlbmRlbmN5LnBhdGgsIGZyb206IGJ1aWxkRGlyZWN0b3J5LnBhdGgpOwogICAgICByZXR1cm4gJyAgJG5hbWU6XG4gICAgcGF0aDogJHBhdGgnOwogICAgfSwKICApLmpvaW4oJ1xuJyl9CicnJyk7CgogIHJldHVybiBjb3BpZWRFeHRlcm5hbFBhdGhEZXBlbmRlbmNpZXMKICAgICAgLm1hcCgoZGVwZW5kZW5jeSkgPT4gZGVwZW5kZW5jeS5wYXRoKQogICAgICAudG9MaXN0KCk7Cn0KCi8vLyB7QHRlbXBsYXRlIGV4dGVybmFsX3BhdGhfZGVwZW5kZW5jeX0KLy8vIEEgcGF0aCBkZXBlbmRlbmN5IHRoYXQgaXMgbm90IHdpdGhpbiB0aGUgYnVuZGxlZCBEYXJ0IEZyb2cgcHJvamVjdAovLy8gZGlyZWN0b3J5LgovLy8KLy8vIEZvciBleGFtcGxlOgovLy8gYGBgeWFtbAovLy8gbmFtZTogbXlfZGFydF9mcm9nX3Byb2plY3QKLy8vIGRlcGVuZGVuY2llczoKLy8vICAgbXlfcGFja2FnZToKLy8vICAgICBwYXRoOiAuLi9teV9wYWNrYWdlCi8vLyBgYGAKLy8vIHtAZW5kdGVtcGxhdGV9CmNsYXNzIF9FeHRlcm5hbFBhdGhEZXBlbmRlbmN5IHsKICAvLy8ge0BtYWNybyBleHRlcm5hbF9wYXRoX2RlcGVuZGVuY3l9CiAgY29uc3QgX0V4dGVybmFsUGF0aERlcGVuZGVuY3koewogICAgcmVxdWlyZWQgdGhpcy5uYW1lLAogICAgcmVxdWlyZWQgdGhpcy5wYXRoLAogIH0pOwoKICAvLy8gVGhlIG5hbWUgb2YgdGhlIHBhY2thZ2UuCiAgZmluYWwgU3RyaW5nIG5hbWU7CgogIC8vLyBUaGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgcGFja2FnZS4KICBmaW5hbCBTdHJpbmcgcGF0aDsKCiAgLy8vIENvcGllcyB0aGUgW19FeHRlcm5hbFBhdGhEZXBlbmRlbmN5XSB0byBbdGFyZ2V0RGlyZWN0b3J5XS4KICBGdXR1cmU8X0V4dGVybmFsUGF0aERlcGVuZGVuY3k+IGNvcHlUbyh7CiAgICByZXF1aXJlZCBEaXJlY3RvcnkgdGFyZ2V0RGlyZWN0b3J5LAogICAgQ29weVBhdGggY29weVBhdGggPSBpby5jb3B5UGF0aCwKICB9KSBhc3luYyB7CiAgICBhd2FpdCBjb3B5UGF0aChwYXRoLCB0YXJnZXREaXJlY3RvcnkucGF0aCk7CiAgICByZXR1cm4gX0V4dGVybmFsUGF0aERlcGVuZGVuY3kobmFtZTogbmFtZSwgcGF0aDogdGFyZ2V0RGlyZWN0b3J5LnBhdGgpOwogIH0KfQo=", + "aW1wb3J0ICdkYXJ0OmlvJzsKCmltcG9ydCAncGFja2FnZTpkYXJ0X2Zyb2dfcHJvZF9zZXJ2ZXJfaG9va3MvZGFydF9mcm9nX3Byb2Rfc2VydmVyX2hvb2tzLmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6aW8vaW8uZGFydCcgYXMgaW87CmltcG9ydCAncGFja2FnZTpwYXRoL3BhdGguZGFydCcgYXMgcGF0aDsKaW1wb3J0ICdwYWNrYWdlOnB1YnNwZWNfcGFyc2UvcHVic3BlY19wYXJzZS5kYXJ0JzsKCi8vLyBTaWduYXR1cmUgb2YgW2lvLmNvcHlQYXRoXS4KdHlwZWRlZiBDb3B5UGF0aCA9IEZ1dHVyZTx2b2lkPiBGdW5jdGlvbihTdHJpbmcgZnJvbSwgU3RyaW5nIHRvKTsKCkZ1dHVyZTxMaXN0PFN0cmluZz4+IGNyZWF0ZUV4dGVybmFsUGFja2FnZXNGb2xkZXIoewogIHJlcXVpcmVkIERpcmVjdG9yeSBwcm9qZWN0RGlyZWN0b3J5LAogIHJlcXVpcmVkIERpcmVjdG9yeSBidWlsZERpcmVjdG9yeSwKICBDb3B5UGF0aCBjb3B5UGF0aCA9IGlvLmNvcHlQYXRoLAp9KSBhc3luYyB7CiAgZmluYWwgcGF0aFJlc29sdmVyID0gcGF0aC5jb250ZXh0OwogIGZpbmFsIHB1YnNwZWMgPSBhd2FpdCBnZXRQdWJzcGVjKAogICAgcHJvamVjdERpcmVjdG9yeS5wYXRoLAogICAgcGF0aENvbnRleHQ6IHBhdGguY29udGV4dCwKICApOwoKICBmaW5hbCBleHRlcm5hbFBhdGhEZXBlbmRlbmNpZXMgPSBwdWJzcGVjLmRlcGVuZGVuY2llcy52YWx1ZXMKICAgICAgLm1hcCgKICAgICAgICAoZGVwZW5kZW5jeSkgewogICAgICAgICAgaWYgKGRlcGVuZGVuY3kgaXMhIFBhdGhEZXBlbmRlbmN5KSByZXR1cm4gbnVsbDsKICAgICAgICAgIGlmIChwYXRoUmVzb2x2ZXIuaXNXaXRoaW4oJycsIGRlcGVuZGVuY3kucGF0aCkpIHJldHVybiBudWxsOwoKICAgICAgICAgIHJldHVybiBfRXh0ZXJuYWxQYXRoRGVwZW5kZW5jeSgKICAgICAgICAgICAgbmFtZTogcGF0aC5iYXNlbmFtZVdpdGhvdXRFeHRlbnNpb24oZGVwZW5kZW5jeS5wYXRoKSwKICAgICAgICAgICAgcGF0aDogcGF0aC5qb2luKHByb2plY3REaXJlY3RvcnkucGF0aCwgZGVwZW5kZW5jeS5wYXRoKSwKICAgICAgICAgICk7CiAgICAgICAgfSwKICAgICAgKQogICAgICAud2hlcmVUeXBlPF9FeHRlcm5hbFBhdGhEZXBlbmRlbmN5PigpCiAgICAgIC50b0xpc3QoKTsKCiAgaWYgKGV4dGVybmFsUGF0aERlcGVuZGVuY2llcy5pc0VtcHR5KSByZXR1cm4gW107CgogIGZpbmFsIHBhY2thZ2VzRGlyZWN0b3J5ID0gRGlyZWN0b3J5KAogICAgcGF0aFJlc29sdmVyLmpvaW4oCiAgICAgIGJ1aWxkRGlyZWN0b3J5LnBhdGgsCiAgICAgICcuZGFydF9mcm9nX3BhdGhfZGVwZW5kZW5jaWVzJywKICAgICksCiAgKS4uY3JlYXRlU3luYyhyZWN1cnNpdmU6IHRydWUpOwoKICBmaW5hbCBjb3BpZWRFeHRlcm5hbFBhdGhEZXBlbmRlbmNpZXMgPSBhd2FpdCBGdXR1cmUud2FpdCgKICAgIGV4dGVybmFsUGF0aERlcGVuZGVuY2llcy5tYXAoCiAgICAgIChleHRlcm5hbFBhdGhEZXBlbmRlbmN5KSA9PiBleHRlcm5hbFBhdGhEZXBlbmRlbmN5LmNvcHlUbygKICAgICAgICBjb3B5UGF0aDogY29weVBhdGgsCiAgICAgICAgdGFyZ2V0RGlyZWN0b3J5OiBEaXJlY3RvcnkoCiAgICAgICAgICBwYXRoUmVzb2x2ZXIuam9pbigKICAgICAgICAgICAgcGFja2FnZXNEaXJlY3RvcnkucGF0aCwKICAgICAgICAgICAgZXh0ZXJuYWxQYXRoRGVwZW5kZW5jeS5uYW1lLAogICAgICAgICAgKSwKICAgICAgICApLAogICAgICApLAogICAgKSwKICApOwoKICBhd2FpdCBGaWxlKAogICAgcGF0aFJlc29sdmVyLmpvaW4oCiAgICAgIGJ1aWxkRGlyZWN0b3J5LnBhdGgsCiAgICAgICdwdWJzcGVjX292ZXJyaWRlcy55YW1sJywKICAgICksCiAgKS53cml0ZUFzU3RyaW5nKAogICAgJycnCmRlcGVuZGVuY3lfb3ZlcnJpZGVzOgoke2NvcGllZEV4dGVybmFsUGF0aERlcGVuZGVuY2llcy5tYXAoCiAgICAgIChkZXBlbmRlbmN5KSB7CiAgICAgICAgZmluYWwgbmFtZSA9IGRlcGVuZGVuY3kubmFtZTsKICAgICAgICBmaW5hbCBwYXRoID0KICAgICAgICAgICAgcGF0aFJlc29sdmVyLnJlbGF0aXZlKGRlcGVuZGVuY3kucGF0aCwgZnJvbTogYnVpbGREaXJlY3RvcnkucGF0aCk7CiAgICAgICAgcmV0dXJuICcgICRuYW1lOlxuICAgIHBhdGg6ICRwYXRoJzsKICAgICAgfSwKICAgICkuam9pbignXG4nKX0KJycnLAogICAgbW9kZTogRmlsZU1vZGUuYXBwZW5kLAogICk7CgogIHJldHVybiBjb3BpZWRFeHRlcm5hbFBhdGhEZXBlbmRlbmNpZXMKICAgICAgLm1hcCgoZGVwZW5kZW5jeSkgPT4gZGVwZW5kZW5jeS5wYXRoKQogICAgICAudG9MaXN0KCk7Cn0KCi8vLyB7QHRlbXBsYXRlIGV4dGVybmFsX3BhdGhfZGVwZW5kZW5jeX0KLy8vIEEgcGF0aCBkZXBlbmRlbmN5IHRoYXQgaXMgbm90IHdpdGhpbiB0aGUgYnVuZGxlZCBEYXJ0IEZyb2cgcHJvamVjdAovLy8gZGlyZWN0b3J5LgovLy8KLy8vIEZvciBleGFtcGxlOgovLy8gYGBgeWFtbAovLy8gbmFtZTogbXlfZGFydF9mcm9nX3Byb2plY3QKLy8vIGRlcGVuZGVuY2llczoKLy8vICAgbXlfcGFja2FnZToKLy8vICAgICBwYXRoOiAuLi9teV9wYWNrYWdlCi8vLyBgYGAKLy8vIHtAZW5kdGVtcGxhdGV9CmNsYXNzIF9FeHRlcm5hbFBhdGhEZXBlbmRlbmN5IHsKICAvLy8ge0BtYWNybyBleHRlcm5hbF9wYXRoX2RlcGVuZGVuY3l9CiAgY29uc3QgX0V4dGVybmFsUGF0aERlcGVuZGVuY3koewogICAgcmVxdWlyZWQgdGhpcy5uYW1lLAogICAgcmVxdWlyZWQgdGhpcy5wYXRoLAogIH0pOwoKICAvLy8gVGhlIG5hbWUgb2YgdGhlIHBhY2thZ2UuCiAgZmluYWwgU3RyaW5nIG5hbWU7CgogIC8vLyBUaGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgcGFja2FnZS4KICBmaW5hbCBTdHJpbmcgcGF0aDsKCiAgLy8vIENvcGllcyB0aGUgW19FeHRlcm5hbFBhdGhEZXBlbmRlbmN5XSB0byBbdGFyZ2V0RGlyZWN0b3J5XS4KICBGdXR1cmU8X0V4dGVybmFsUGF0aERlcGVuZGVuY3k+IGNvcHlUbyh7CiAgICByZXF1aXJlZCBEaXJlY3RvcnkgdGFyZ2V0RGlyZWN0b3J5LAogICAgQ29weVBhdGggY29weVBhdGggPSBpby5jb3B5UGF0aCwKICB9KSBhc3luYyB7CiAgICBhd2FpdCBjb3B5UGF0aChwYXRoLCB0YXJnZXREaXJlY3RvcnkucGF0aCk7CiAgICByZXR1cm4gX0V4dGVybmFsUGF0aERlcGVuZGVuY3kobmFtZTogbmFtZSwgcGF0aDogdGFyZ2V0RGlyZWN0b3J5LnBhdGgpOwogIH0KfQo=", "type": "text" }, { @@ -49,64 +199,76 @@ final dartFrogProdServerBundle = MasonBundle.fromJson({ "aW1wb3J0ICdkYXJ0OmlvJyBhcyBpbzsKCmltcG9ydCAncGFja2FnZTptYXNvbi9tYXNvbi5kYXJ0JzsKCnR5cGVkZWYgUHJvY2Vzc1J1bm5lciA9IEZ1dHVyZTxpby5Qcm9jZXNzUmVzdWx0PiBGdW5jdGlvbigKICBTdHJpbmcgZXhlY3V0YWJsZSwKICBMaXN0PFN0cmluZz4gYXJndW1lbnRzLCB7CiAgU3RyaW5nIHdvcmtpbmdEaXJlY3RvcnksCiAgYm9vbCBydW5JblNoZWxsLAp9KTsKCkZ1dHVyZTx2b2lkPiBkYXJ0UHViR2V0KAogIEhvb2tDb250ZXh0IGNvbnRleHQsIHsKICByZXF1aXJlZCBTdHJpbmcgd29ya2luZ0RpcmVjdG9yeSwKICByZXF1aXJlZCBQcm9jZXNzUnVubmVyIHJ1blByb2Nlc3MsCiAgcmVxdWlyZWQgdm9pZCBGdW5jdGlvbihpbnQgZXhpdENvZGUpIGV4aXQsCn0pIGFzeW5jIHsKICBmaW5hbCBwcm9ncmVzcyA9IGNvbnRleHQubG9nZ2VyLnByb2dyZXNzKCdJbnN0YWxsaW5nIGRlcGVuZGVuY2llcycpOwogIHRyeSB7CiAgICBmaW5hbCByZXN1bHQgPSBhd2FpdCBydW5Qcm9jZXNzKAogICAgICAnZGFydCcsCiAgICAgIFsncHViJywgJ2dldCddLAogICAgICB3b3JraW5nRGlyZWN0b3J5OiB3b3JraW5nRGlyZWN0b3J5LAogICAgICBydW5JblNoZWxsOiB0cnVlLAogICAgKTsKICAgIHByb2dyZXNzLmNvbXBsZXRlKCk7CgogICAgaWYgKHJlc3VsdC5leGl0Q29kZSAhPSAwKSB7CiAgICAgIGNvbnRleHQubG9nZ2VyLmVycignJHtyZXN1bHQuc3RkZXJyfScpOwogICAgICByZXR1cm4gZXhpdChyZXN1bHQuZXhpdENvZGUpOwogICAgfQogIH0gb24gaW8uUHJvY2Vzc0V4Y2VwdGlvbiBjYXRjaCAoZXJyb3IpIHsKICAgIGNvbnRleHQubG9nZ2VyLmVycihlcnJvci5tZXNzYWdlKTsKICAgIHJldHVybiBleGl0KGVycm9yLmVycm9yQ29kZSk7CiAgfQp9Cg==", "type": "text" }, + { + "path": "lib/src/disable_workspace_resolution.dart", + "data": + "aW1wb3J0ICdkYXJ0OmlvJzsKaW1wb3J0ICdwYWNrYWdlOm1hc29uL21hc29uLmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6cGF0aC9wYXRoLmRhcnQnIGFzIHBhdGg7CgovLy8gT3B0cyBvdXQgb2YgZGFydCB3b3Jrc3BhY2VzIHVudGlsIHdlIGNhbiBnZW5lcmF0ZSBwZXIgcGFja2FnZSBsb2NrZmlsZXMuCi8vLyBodHRwczovL2dpdGh1Yi5jb20vZGFydC1sYW5nL3B1Yi9pc3N1ZXMvNDU5NAp2b2lkIGRpc2FibGVXb3Jrc3BhY2VSZXNvbHV0aW9uKAogIEhvb2tDb250ZXh0IGNvbnRleHQsIHsKICByZXF1aXJlZCBTdHJpbmcgYnVpbGREaXJlY3RvcnksCiAgcmVxdWlyZWQgdm9pZCBGdW5jdGlvbihpbnQgZXhpdENvZGUpIGV4aXQsCn0pIHsKICB0cnkgewogICAgRmlsZSgKICAgICAgcGF0aC5qb2luKGJ1aWxkRGlyZWN0b3J5LCAncHVic3BlY19vdmVycmlkZXMueWFtbCcpLAogICAgKS53cml0ZUFzU3RyaW5nU3luYygnXG5yZXNvbHV0aW9uOiBudWxsXG4nLCBtb2RlOiBGaWxlTW9kZS5hcHBlbmQpOwogIH0gb24gRXhjZXB0aW9uIGNhdGNoIChlKSB7CiAgICBjb250ZXh0LmxvZ2dlci5lcnIoJyRlJyk7CiAgICBleGl0KDEpOwogIH0KfQo=", + "type": "text" + }, { "path": "lib/src/exit_overrides.dart", "data": - "aW1wb3J0ICdkYXJ0OmFzeW5jJzsKaW1wb3J0ICdkYXJ0OmlvJyBhcyBpbzsKCmNvbnN0IF9hc3luY1J1blpvbmVkID0gcnVuWm9uZWQ7CgphYnN0cmFjdCBjbGFzcyBFeGl0T3ZlcnJpZGVzIHsKICBzdGF0aWMgZmluYWwgX3Rva2VuID0gT2JqZWN0KCk7CgogIHN0YXRpYyBFeGl0T3ZlcnJpZGVzPyBnZXQgY3VycmVudCB7CiAgICByZXR1cm4gWm9uZS5jdXJyZW50W190b2tlbl0gYXMgRXhpdE92ZXJyaWRlcz87CiAgfQoKICBzdGF0aWMgUiBydW5ab25lZDxSPihSIEZ1bmN0aW9uKCkgYm9keSwge3ZvaWQgRnVuY3Rpb24oaW50KT8gZXhpdH0pIHsKICAgIGZpbmFsIG92ZXJyaWRlcyA9IF9FeGl0T3ZlcnJpZGVzU2NvcGUoZXhpdCk7CiAgICByZXR1cm4gX2FzeW5jUnVuWm9uZWQoYm9keSwgem9uZVZhbHVlczoge190b2tlbjogb3ZlcnJpZGVzfSk7CiAgfQoKICB2b2lkIEZ1bmN0aW9uKGludCBleGl0Q29kZSkgZ2V0IGV4aXQgPT4gaW8uZXhpdDsKfQoKY2xhc3MgX0V4aXRPdmVycmlkZXNTY29wZSBleHRlbmRzIEV4aXRPdmVycmlkZXMgewogIF9FeGl0T3ZlcnJpZGVzU2NvcGUodGhpcy5fZXhpdCk7CgogIGZpbmFsIEV4aXRPdmVycmlkZXM/IF9wcmV2aW91cyA9IEV4aXRPdmVycmlkZXMuY3VycmVudDsKICBmaW5hbCB2b2lkIEZ1bmN0aW9uKGludCBleGl0Q29kZSk/IF9leGl0OwoKICBAb3ZlcnJpZGUKICB2b2lkIEZ1bmN0aW9uKGludCBleGl0Q29kZSkgZ2V0IGV4aXQgewogICAgcmV0dXJuIF9leGl0ID8/IF9wcmV2aW91cz8uZXhpdCA/PyBzdXBlci5leGl0OwogIH0KfQo=", + "aW1wb3J0ICdkYXJ0OmFzeW5jJzsKaW1wb3J0ICdkYXJ0OmlvJyBhcyBpbzsKCmNvbnN0IF9hc3luY1J1blpvbmVkID0gcnVuWm9uZWQ7Cgp2b2lkIGRlZmF1bHRFeGl0KGludCBjb2RlKSA9PiBFeGl0T3ZlcnJpZGVzLmN1cnJlbnQ/LmV4aXQgPz8gaW8uZXhpdDsKCmFic3RyYWN0IGNsYXNzIEV4aXRPdmVycmlkZXMgewogIHN0YXRpYyBmaW5hbCBfdG9rZW4gPSBPYmplY3QoKTsKCiAgc3RhdGljIEV4aXRPdmVycmlkZXM/IGdldCBjdXJyZW50IHsKICAgIHJldHVybiBab25lLmN1cnJlbnRbX3Rva2VuXSBhcyBFeGl0T3ZlcnJpZGVzPzsKICB9CgogIHN0YXRpYyBSIHJ1blpvbmVkPFI+KFIgRnVuY3Rpb24oKSBib2R5LCB7dm9pZCBGdW5jdGlvbihpbnQpPyBleGl0fSkgewogICAgZmluYWwgb3ZlcnJpZGVzID0gX0V4aXRPdmVycmlkZXNTY29wZShleGl0KTsKICAgIHJldHVybiBfYXN5bmNSdW5ab25lZChib2R5LCB6b25lVmFsdWVzOiB7X3Rva2VuOiBvdmVycmlkZXN9KTsKICB9CgogIHZvaWQgRnVuY3Rpb24oaW50IGV4aXRDb2RlKSBnZXQgZXhpdCA9PiBpby5leGl0Owp9CgpjbGFzcyBfRXhpdE92ZXJyaWRlc1Njb3BlIGV4dGVuZHMgRXhpdE92ZXJyaWRlcyB7CiAgX0V4aXRPdmVycmlkZXNTY29wZSh0aGlzLl9leGl0KTsKCiAgZmluYWwgRXhpdE92ZXJyaWRlcz8gX3ByZXZpb3VzID0gRXhpdE92ZXJyaWRlcy5jdXJyZW50OwogIGZpbmFsIHZvaWQgRnVuY3Rpb24oaW50IGV4aXRDb2RlKT8gX2V4aXQ7CgogIEBvdmVycmlkZQogIHZvaWQgRnVuY3Rpb24oaW50IGV4aXRDb2RlKSBnZXQgZXhpdCB7CiAgICByZXR1cm4gX2V4aXQgPz8gX3ByZXZpb3VzPy5leGl0ID8/IHN1cGVyLmV4aXQ7CiAgfQp9Cg==", "type": "text" }, { "path": "lib/src/get_internal_path_dependencies.dart", "data": - "aW1wb3J0ICdkYXJ0OmlvJyBhcyBpbzsKCmltcG9ydCAncGFja2FnZTpkYXJ0X2Zyb2dfcHJvZF9zZXJ2ZXJfaG9va3MvZGFydF9mcm9nX3Byb2Rfc2VydmVyX2hvb2tzLmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6cGF0aC9wYXRoLmRhcnQnIGFzIHBhdGg7CgpGdXR1cmU8TGlzdDxTdHJpbmc+PiBnZXRJbnRlcm5hbFBhdGhEZXBlbmRlbmNpZXMoaW8uRGlyZWN0b3J5IGRpcmVjdG9yeSkgYXN5bmMgewogIGZpbmFsIHB1YnNwZWNMb2NrID0gYXdhaXQgZ2V0UHVic3BlY0xvY2soZGlyZWN0b3J5LnBhdGgpOwoKICBmaW5hbCBpbnRlcm5hbFBhdGhEZXBlbmRlbmNpZXMgPSBwdWJzcGVjTG9jay5wYWNrYWdlcy53aGVyZSgKICAgIChkZXBlbmRlbmN5KSB7CiAgICAgIGZpbmFsIHBhdGhEZXNjcmlwdGlvbiA9IGRlcGVuZGVuY3kucGF0aERlc2NyaXB0aW9uOwogICAgICBpZiAocGF0aERlc2NyaXB0aW9uID09IG51bGwpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KCiAgICAgIHJldHVybiBwYXRoLmlzV2l0aGluKCcnLCBwYXRoRGVzY3JpcHRpb24ucGF0aCk7CiAgICB9LAogICk7CgogIHJldHVybiBpbnRlcm5hbFBhdGhEZXBlbmRlbmNpZXMKICAgICAgLm1hcCgoZGVwZW5kZW5jeSkgPT4gZGVwZW5kZW5jeS5wYXRoRGVzY3JpcHRpb24hLnBhdGgpCiAgICAgIC50b0xpc3QoKTsKfQo=", + "aW1wb3J0ICdkYXJ0OmlvJyBhcyBpbzsKCmltcG9ydCAncGFja2FnZTpkYXJ0X2Zyb2dfcHJvZF9zZXJ2ZXJfaG9va3MvZGFydF9mcm9nX3Byb2Rfc2VydmVyX2hvb2tzLmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6cGF0aC9wYXRoLmRhcnQnIGFzIHBhdGg7CmltcG9ydCAncGFja2FnZTpwdWJzcGVjX3BhcnNlL3B1YnNwZWNfcGFyc2UuZGFydCc7CgpGdXR1cmU8TGlzdDxTdHJpbmc+PiBnZXRJbnRlcm5hbFBhdGhEZXBlbmRlbmNpZXMoaW8uRGlyZWN0b3J5IGRpcmVjdG9yeSkgYXN5bmMgewogIGZpbmFsIHB1YnNwZWMgPSBhd2FpdCBnZXRQdWJzcGVjKGRpcmVjdG9yeS5wYXRoKTsKCiAgZmluYWwgaW50ZXJuYWxQYXRoRGVwZW5kZW5jaWVzID0gcHVic3BlYy5kZXBlbmRlbmNpZXMudmFsdWVzLndoZXJlKAogICAgKGRlcGVuZGVuY3kpIHsKICAgICAgcmV0dXJuIGRlcGVuZGVuY3kgaXMgUGF0aERlcGVuZGVuY3kgJiYgcGF0aC5pc1dpdGhpbignJywgZGVwZW5kZW5jeS5wYXRoKTsKICAgIH0sCiAgKS5jYXN0PFBhdGhEZXBlbmRlbmN5PigpOwoKICByZXR1cm4gaW50ZXJuYWxQYXRoRGVwZW5kZW5jaWVzLm1hcCgoZGVwZW5kZW5jeSkgPT4gZGVwZW5kZW5jeS5wYXRoKS50b0xpc3QoKTsKfQo=", "type": "text" }, { - "path": "lib/src/get_pubspec_lock.dart", + "path": "lib/src/get_pubspec.dart", "data": - "aW1wb3J0ICdkYXJ0OmlvJzsKCmltcG9ydCAncGFja2FnZTpkYXJ0X2Zyb2dfcHJvZF9zZXJ2ZXJfaG9va3Mvc3JjL3B1YnNwZWNfbG9jay9wdWJzcGVjX2xvY2suZGFydCc7CmltcG9ydCAncGFja2FnZTpwYXRoL3BhdGguZGFydCcgYXMgcGF0aDsKCkZ1dHVyZTxQdWJzcGVjTG9jaz4gZ2V0UHVic3BlY0xvY2soCiAgU3RyaW5nIHdvcmtpbmdEaXJlY3RvcnksIHsKICBwYXRoLkNvbnRleHQ/IHBhdGhDb250ZXh0LAp9KSBhc3luYyB7CiAgZmluYWwgcGF0aFJlc29sdmVyID0gcGF0aENvbnRleHQgPz8gcGF0aC5jb250ZXh0OwogIGZpbmFsIHB1YnNwZWNMb2NrRmlsZSA9IEZpbGUoCiAgICB3b3JraW5nRGlyZWN0b3J5LmlzRW1wdHkKICAgICAgICA/ICdwdWJzcGVjLmxvY2snCiAgICAgICAgOiBwYXRoUmVzb2x2ZXIuam9pbih3b3JraW5nRGlyZWN0b3J5LCAncHVic3BlYy5sb2NrJyksCiAgKTsKCiAgZmluYWwgY29udGVudCA9IGF3YWl0IHB1YnNwZWNMb2NrRmlsZS5yZWFkQXNTdHJpbmcoKTsKICByZXR1cm4gUHVic3BlY0xvY2suZnJvbVN0cmluZyhjb250ZW50KTsKfQo=", + "aW1wb3J0ICdkYXJ0OmlvJzsKCmltcG9ydCAncGFja2FnZTpwYXRoL3BhdGguZGFydCcgYXMgcGF0aDsKaW1wb3J0ICdwYWNrYWdlOnB1YnNwZWNfcGFyc2UvcHVic3BlY19wYXJzZS5kYXJ0JzsKCkZ1dHVyZTxQdWJzcGVjPiBnZXRQdWJzcGVjKAogIFN0cmluZyB3b3JraW5nRGlyZWN0b3J5LCB7CiAgcGF0aC5Db250ZXh0PyBwYXRoQ29udGV4dCwKfSkgYXN5bmMgewogIGNvbnN0IHB1YnNwZWNZYW1sID0gJ3B1YnNwZWMueWFtbCc7CiAgZmluYWwgcGF0aFJlc29sdmVyID0gcGF0aENvbnRleHQgPz8gcGF0aC5jb250ZXh0OwogIGZpbmFsIHB1YnNwZWNGaWxlID0gRmlsZSgKICAgIHdvcmtpbmdEaXJlY3RvcnkuaXNFbXB0eQogICAgICAgID8gcHVic3BlY1lhbWwKICAgICAgICA6IHBhdGhSZXNvbHZlci5qb2luKHdvcmtpbmdEaXJlY3RvcnksIHB1YnNwZWNZYW1sKSwKICApOwoKICBmaW5hbCBjb250ZW50ID0gYXdhaXQgcHVic3BlY0ZpbGUucmVhZEFzU3RyaW5nKCk7CiAgcmV0dXJuIFB1YnNwZWMucGFyc2UoY29udGVudCk7Cn0K", "type": "text" }, { - "path": "lib/src/pubspec_lock/pubspec_lock.dart", + "path": "lib/src/uses_workspace_resolution.dart", "data": - "aW1wb3J0ICdkYXJ0OmNvbGxlY3Rpb24nOwoKaW1wb3J0ICdwYWNrYWdlOmVxdWF0YWJsZS9lcXVhdGFibGUuZGFydCc7CmltcG9ydCAncGFja2FnZTp5YW1sL3lhbWwuZGFydCc7CgovLy8ge0B0ZW1wbGF0ZSBwdWJzcGVjX2xvY2tfcGFyc2VfZXhjZXB0aW9ufQovLy8gVGhyb3duIHdoZW4gYSBbUHVic3BlY0xvY2tdIGZhaWxzIHRvIHBhcnNlLgovLy8ge0BlbmR0ZW1wbGF0ZX0KY2xhc3MgUHVic3BlY0xvY2tQYXJzZUV4Y2VwdGlvbiBpbXBsZW1lbnRzIEV4Y2VwdGlvbiB7CiAgLy8vIHtAbWFjcm8gcHVic3BlY19sb2NrX3BhcnNlX2V4Y2VwdGlvbn0KICBjb25zdCBQdWJzcGVjTG9ja1BhcnNlRXhjZXB0aW9uKCk7Cn0KCi8vLyBBIHJlcHJlc2VudGF0aW9uIG9mIGEgcHVic3BlYy5sb2NrIGZpbGUuCmNsYXNzIFB1YnNwZWNMb2NrIHsKICBjb25zdCBQdWJzcGVjTG9jay5fKHsKICAgIHJlcXVpcmVkIHRoaXMucGFja2FnZXMsCiAgfSk7CgogIC8vLyBQYXJzZXMgYSBbUHVic3BlY0xvY2tdIGZyb20gYSBzdHJpbmcuCiAgLy8vCiAgLy8vIElmIG5vIHBhY2thZ2VzIGFyZSBmb3VuZCwgYW4gZW1wdHkgW1B1YnNwZWNMb2NrXSBpcyByZXR1cm5lZC4gVGhvc2UKICAvLy8gcGFja2FnZXMgZW50cmllcyB0aGF0IGNhbm5vdCBiZSBwYXJzZWQgYXJlIGlnbm9yZWQuCiAgLy8vCiAgLy8vIEl0IHRocm93cyBhIFtQdWJzcGVjTG9ja1BhcnNlRXhjZXB0aW9uXSBpZiB0aGUgc3RyaW5nIGNhbm5vdCBiZSBwYXJzZWQKICAvLy8gYXMgYSBbWWFtbE1hcF0uCiAgZmFjdG9yeSBQdWJzcGVjTG9jay5mcm9tU3RyaW5nKFN0cmluZyBjb250ZW50KSB7CiAgICBsYXRlIGZpbmFsIFlhbWxNYXAgeWFtbDsKICAgIHRyeSB7CiAgICAgIHlhbWwgPSBsb2FkWWFtbChjb250ZW50KSBhcyBZYW1sTWFwOwogICAgICAvLyBpZ25vcmluZyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eQogICAgICAvLyBpZ25vcmU6IGF2b2lkX2NhdGNoZXNfd2l0aG91dF9vbl9jbGF1c2VzCiAgICB9IGNhdGNoIChfKSB7CiAgICAgIHRocm93IGNvbnN0IFB1YnNwZWNMb2NrUGFyc2VFeGNlcHRpb24oKTsKICAgIH0KCiAgICBpZiAoIXlhbWwuY29udGFpbnNLZXkoJ3BhY2thZ2VzJykpIHsKICAgICAgcmV0dXJuIFB1YnNwZWNMb2NrLmVtcHR5OwogICAgfQoKICAgIGZpbmFsIHBhY2thZ2VzID0geWFtbFsncGFja2FnZXMnXSBhcyBZYW1sTWFwOwoKICAgIGZpbmFsIHBhcnNlZFBhY2thZ2VzID0gPFB1YnNwZWNMb2NrUGFja2FnZT5bXTsKICAgIGZvciAoZmluYWwgZW50cnkgaW4gcGFja2FnZXMuZW50cmllcykgewogICAgICB0cnkgewogICAgICAgIGZpbmFsIHBhY2thZ2UgPSBQdWJzcGVjTG9ja1BhY2thZ2UuZnJvbVlhbWxNYXAoCiAgICAgICAgICBuYW1lOiBlbnRyeS5rZXkgYXMgU3RyaW5nLAogICAgICAgICAgZGF0YTogZW50cnkudmFsdWUgYXMgWWFtbE1hcCwKICAgICAgICApOwogICAgICAgIHBhcnNlZFBhY2thZ2VzLmFkZChwYWNrYWdlKTsKICAgICAgICAvLyBpZ25vcmluZyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eQogICAgICAgIC8vIGlnbm9yZTogYXZvaWRfY2F0Y2hlc193aXRob3V0X29uX2NsYXVzZXMKICAgICAgfSBjYXRjaCAoXykgewogICAgICAgIC8vIElnbm9yZSB0aG9zZSBwYWNrYWdlcyB0aGF0IGZvciBzb21lIHJlYXNvbiBjYW5ub3QgYmUgcGFyc2VkLgogICAgICB9CiAgICB9CgogICAgcmV0dXJuIFB1YnNwZWNMb2NrLl8oCiAgICAgIHBhY2thZ2VzOiBVbm1vZGlmaWFibGVMaXN0VmlldyhwYXJzZWRQYWNrYWdlcyksCiAgICApOwogIH0KCiAgLy8vIEFuIGVtcHR5IFtQdWJzcGVjTG9ja10uCiAgc3RhdGljIFB1YnNwZWNMb2NrIGVtcHR5ID0gUHVic3BlY0xvY2suXygKICAgIHBhY2thZ2VzOiBVbm1vZGlmaWFibGVMaXN0VmlldyhbXSksCiAgKTsKCiAgLy8vIEFsbCB0aGUgZGVwZW5kZW5jaWVzIGluIHRoZSBwdWJzcGVjLmxvY2sgZmlsZS4KICBmaW5hbCBVbm1vZGlmaWFibGVMaXN0VmlldzxQdWJzcGVjTG9ja1BhY2thZ2U+IHBhY2thZ2VzOwp9CgovLy8ge0B0ZW1wbGF0ZSBwdWJzcGVjX2xvY2tfZGVwZW5kZW5jeX0KLy8vIEEgcmVwcmVzZW50YXRpb24gb2YgYSBkZXBlbmRlbmN5IGluIGEgcHVic3BlYy5sb2NrIGZpbGUuCi8vLyB7QGVuZHRlbXBsYXRlfQpjbGFzcyBQdWJzcGVjTG9ja1BhY2thZ2UgZXh0ZW5kcyBFcXVhdGFibGUgewogIC8vLyB7QG1hY3JvIHB1YnNwZWNfbG9ja19kZXBlbmRlbmN5fQogIGNvbnN0IFB1YnNwZWNMb2NrUGFja2FnZSh7CiAgICByZXF1aXJlZCB0aGlzLm5hbWUsCiAgICByZXF1aXJlZCB0aGlzLnR5cGUsCiAgICB0aGlzLnBhdGhEZXNjcmlwdGlvbiwKICB9KTsKCiAgLy8vIFBhcnNlcyBhIFtQdWJzcGVjTG9ja1BhY2thZ2VdIGZyb20gYSBbWWFtbE1hcF0uCiAgZmFjdG9yeSBQdWJzcGVjTG9ja1BhY2thZ2UuZnJvbVlhbWxNYXAoewogICAgcmVxdWlyZWQgU3RyaW5nIG5hbWUsCiAgICByZXF1aXJlZCBZYW1sTWFwIGRhdGEsCiAgfSkgewogICAgZmluYWwgZGVwZW5kZW5jeSA9IGRhdGFbJ2RlcGVuZGVuY3knXSBhcyBTdHJpbmc7CiAgICBmaW5hbCBkZXBlbmRlbmN5VHlwZSA9IFB1YnNwZWNMb2NrUGFja2FnZURlcGVuZGVuY3lUeXBlLnBhcnNlKGRlcGVuZGVuY3kpOwoKICAgIGZpbmFsIGRlc2NyaXB0aW9uID0gZGF0YVsnZGVzY3JpcHRpb24nXSBhcyBZYW1sTWFwPzsKICAgIGZpbmFsIHBhdGhEZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uICE9IG51bGwKICAgICAgICA/IFB1YnNwZWNQYWNrYWdlUGF0aERlc2NyaXB0aW9uLnRyeVBhcnNlKGRlc2NyaXB0aW9uKQogICAgICAgIDogbnVsbDsKCiAgICByZXR1cm4gUHVic3BlY0xvY2tQYWNrYWdlKAogICAgICBuYW1lOiBuYW1lLAogICAgICB0eXBlOiBkZXBlbmRlbmN5VHlwZSwKICAgICAgcGF0aERlc2NyaXB0aW9uOiBwYXRoRGVzY3JpcHRpb24sCiAgICApOwogIH0KCiAgLy8vIFRoZSBuYW1lIG9mIHRoZSBkZXBlbmRlbmN5LgogIGZpbmFsIFN0cmluZyBuYW1lOwoKICAvLy8ge0BtYWNybyBwdWJzcGVjX2xvY2tfZGVwZW5kZW5jeV90eXBlfQogIGZpbmFsIFB1YnNwZWNMb2NrUGFja2FnZURlcGVuZGVuY3lUeXBlIHR5cGU7CgogIC8vLyB7QG1hY3JvIHB1YnNwZWNfcGFja2FnZV9wYXRoX2Rlc2NyaXB0aW9ufQogIGZpbmFsIFB1YnNwZWNQYWNrYWdlUGF0aERlc2NyaXB0aW9uPyBwYXRoRGVzY3JpcHRpb247CgogIEBvdmVycmlkZQogIExpc3Q8T2JqZWN0Pz4gZ2V0IHByb3BzID0+IFtuYW1lLCB0eXBlLCBwYXRoRGVzY3JpcHRpb25dOwp9CgovLy8ge0B0ZW1wbGF0ZSBwdWJzcGVjX2xvY2tfZGVwZW5kZW5jeV90eXBlfQovLy8gVGhlIHR5cGUgb2YgYSBbUHVic3BlY0xvY2tQYWNrYWdlXS4KLy8vIHtAZW5kdGVtcGxhdGV9CmVudW0gUHVic3BlY0xvY2tQYWNrYWdlRGVwZW5kZW5jeVR5cGUgewogIC8vLyBBbm90aGVyIHBhY2thZ2UgdGhhdCB5b3VyIHBhY2thZ2UgbmVlZHMgdG8gd29yay4KICAvLy8KICAvLy8gU2VlIGFsc286CiAgLy8vCiAgLy8vICogW0RhcnQncyBkZXBlbmRlbmN5IGRvY3VtZW50YXRpb25dKGh0dHBzOi8vZGFydC5kZXYvdG9vbHMvcHViL2RlcGVuZGVuY2llcykKICBkaXJlY3RNYWluLl8oJ2RpcmVjdCBtYWluJyksCgogIC8vLyBBbm90aGVyIHBhY2thZ2UgdGhhdCB5b3VyIHBhY2thZ2UgbmVlZHMgZHVyaW5nIGRldmVsb3BtZW50LgogIC8vLwogIC8vLyBTZWUgYWxzbzoKICAvLy8KICAvLy8gKiBbRGFydCdzIGRldmVsb3BlciBkZXBlbmRlbmN5IGRvY3VtZW50YXRpb25dKGh0dHBzOi8vZGFydC5kZXYvdG9vbHMvcHViL2RlcGVuZGVuY2llcyNkZXYtZGVwZW5kZW5jaWVzKQogIGRpcmVjdERldi5fKCdkaXJlY3QgZGV2JyksCgogIC8vLyBBIGRlcGVuZGVuY3kgdGhhdCB5b3VyIHBhY2thZ2UgaW5kaXJlY3RseSB1c2VzIGJlY2F1c2Ugb25lIG9mIGl0cwogIC8vLyBkZXBlbmRlbmNpZXMgcmVxdWlyZXMgaXQuCiAgLy8vCiAgLy8vIFNlZSBhbHNvOgogIC8vLwogIC8vLyAqIFtEYXJ0J3MgdHJhbnNpdGl2ZSBkZXBlbmRlbmN5IGRvY3VtZW50YXRpb25dKGh0dHBzOi8vZGFydC5kZXYvdG9vbHMvcHViL2dsb3NzYXJ5I3RyYW5zaXRpdmUtKQogIHRyYW5zaXRpdmUuXygndHJhbnNpdGl2ZScpLAoKICAvLy8gIEEgZGVwZW5kZW5jeSB0aGF0IHlvdXIgcGFja2FnZSBvdmVycmlkZXMgdGhhdCBpcyBub3QgYWxyZWFkeSBhCiAgLy8vIGBkaXJlY3QgbWFpbmAgb3IgYGRpcmVjdCBkZXZgIGRlcGVuZGVuY3kuCiAgLy8vCiAgLy8vIFNlZSBhbHNvOgogIC8vLwogIC8vLyAqIFtEYXJ0J3MgZGVwZW5kZW5jeSBvdmVycmlkZSBkb2N1bWVudGF0aW9uXShodHRwczovL2RhcnQuZGV2L3Rvb2xzL3B1Yi9kZXBlbmRlbmNpZXMjZGVwZW5kZW5jeS1vdmVycmlkZXMpCiAgZGlyZWN0T3ZlcnJpZGRlbi5fKCdkaXJlY3Qgb3ZlcnJpZGRlbicpOwoKICBjb25zdCBQdWJzcGVjTG9ja1BhY2thZ2VEZXBlbmRlbmN5VHlwZS5fKHRoaXMudmFsdWUpOwoKICAvLy8gUGFyc2VzIGEgW1B1YnNwZWNMb2NrUGFja2FnZURlcGVuZGVuY3lUeXBlXSBmcm9tIGEgc3RyaW5nLgogIC8vLwogIC8vLyBUaHJvd3MgYW4gW0FyZ3VtZW50RXJyb3JdIGlmIHRoZSBzdHJpbmcgaXMgbm90IGEgdmFsaWQgZGVwZW5kZW5jeSB0eXBlLgogIGZhY3RvcnkgUHVic3BlY0xvY2tQYWNrYWdlRGVwZW5kZW5jeVR5cGUucGFyc2UoU3RyaW5nIHZhbHVlKSB7CiAgICBpZiAoX3ZhbHVlTWFwLmNvbnRhaW5zS2V5KHZhbHVlKSkgewogICAgICByZXR1cm4gX3ZhbHVlTWFwW3ZhbHVlXSE7CiAgICB9CgogICAgdGhyb3cgQXJndW1lbnRFcnJvci52YWx1ZSgKICAgICAgdmFsdWUsCiAgICAgICd2YWx1ZScsCiAgICAgICdJbnZhbGlkIFB1YnNwZWNMb2NrUGFja2FnZURlcGVuZGVuY3lUeXBlIHZhbHVlLicsCiAgICApOwogIH0KCiAgc3RhdGljIE1hcDxTdHJpbmcsIFB1YnNwZWNMb2NrUGFja2FnZURlcGVuZGVuY3lUeXBlPiBfdmFsdWVNYXAgPSB7CiAgICBmb3IgKGZpbmFsIHR5cGUgaW4gUHVic3BlY0xvY2tQYWNrYWdlRGVwZW5kZW5jeVR5cGUudmFsdWVzKQogICAgICB0eXBlLnZhbHVlOiB0eXBlLAogIH07CgogIC8vLyBUaGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBbUHVic3BlY0xvY2tQYWNrYWdlRGVwZW5kZW5jeVR5cGVdCiAgLy8vIGFzIGl0IGFwcGVhcnMgaW4gYSBwdWJzcGVjLmxvY2sgZmlsZS4KICBmaW5hbCBTdHJpbmcgdmFsdWU7Cn0KCi8vLyB7QHRlbXBsYXRlIHB1YnNwZWNfcGFja2FnZV9wYXRoX2Rlc2NyaXB0aW9ufQovLy8gVGhlIGRlc2NyaXB0aW9uIG9mIGEgcGF0aCBkZXBlbmRlbmN5IGluIGEgcHVic3BlYy5sb2NrIGZpbGUuCi8vLwovLy8gRm9yIGV4YW1wbGUsIGluOgovLy8gYGBgeWFtbAovLy8gbXlfcGFja2FnZToKLy8vICAgZGVwZW5kZW5jeTogImRpcmVjdCBtYWluIgovLy8gICBkZXNjcmlwdGlvbjoKLy8vICAgICBwYXRoOiAicGFja2FnZXMvbXlfcGFja2FnZSIKLy8vICAgICByZWxhdGl2ZTogdHJ1ZQovLy8gICBzb3VyY2U6IHBhdGgKLy8vICAgdmVyc2lvbjogIjEuMC4wKzEiCi8vLyBgYGAKLy8vCi8vLyBUaGUgZGVzY3JpcHRpb24gaXM6Ci8vLyBgYGB5YW1sCi8vLyBwYXRoOiAicGFja2FnZXMvbXlfcGFja2FnZSIKLy8vIHJlbGF0aXZlOiB0cnVlCi8vLyBgYGAKLy8vCi8vLyBTZWUgYWxzbzoKLy8vCi8vLyAqIFtQdWJzcGVjUGFja2FnZVBhdGhEZXNjcmlwdGlvbi50cnlQYXJzZV0sIHdoaWNoIGF0dGVtcHRzIHRvIHBhcnNlcyBhCi8vLyBbWWFtbE1hcF0gaW50byBhIFtQdWJzcGVjUGFja2FnZVBhdGhEZXNjcmlwdGlvbl0uCi8vLyB7QGVuZHRlbXBsYXRlfQpjbGFzcyBQdWJzcGVjUGFja2FnZVBhdGhEZXNjcmlwdGlvbiBleHRlbmRzIEVxdWF0YWJsZSB7CiAgY29uc3QgUHVic3BlY1BhY2thZ2VQYXRoRGVzY3JpcHRpb24oewogICAgcmVxdWlyZWQgdGhpcy5wYXRoLAogICAgcmVxdWlyZWQgdGhpcy5yZWxhdGl2ZSwKICB9KTsKCiAgLy8vIEF0dGVtcHRzIHRvIHBhcnNlIGEgW1lhbWxNYXBdIGludG8gYSBbUHVic3BlY1BhY2thZ2VQYXRoRGVzY3JpcHRpb25dLgogIC8vLwogIC8vLyBSZXR1cm5zIGBudWxsYCBpZiB0aGUgW1lhbWxNYXBdIGRvZXMgbm90IGNvbnRhaW4gdGhlIHJlcXVpcmVkIGRhdGEKICAvLy8gdG8gY3JlYXRlIGEgW1B1YnNwZWNQYWNrYWdlUGF0aERlc2NyaXB0aW9uXS4KICBzdGF0aWMgUHVic3BlY1BhY2thZ2VQYXRoRGVzY3JpcHRpb24/IHRyeVBhcnNlKFlhbWxNYXAgZGF0YSkgewogICAgaWYgKCghZGF0YS5jb250YWluc0tleSgncGF0aCcpIHx8IGRhdGFbJ3BhdGgnXSBpcyEgU3RyaW5nKSB8fAogICAgICAgICghZGF0YS5jb250YWluc0tleSgncmVsYXRpdmUnKSB8fCBkYXRhWydyZWxhdGl2ZSddIGlzISBib29sKSkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICBmaW5hbCBwYXRoID0gZGF0YVsncGF0aCddIGFzIFN0cmluZzsKICAgIGZpbmFsIHJlbGF0aXZlID0gZGF0YVsncmVsYXRpdmUnXSBhcyBib29sOwoKICAgIHJldHVybiBQdWJzcGVjUGFja2FnZVBhdGhEZXNjcmlwdGlvbigKICAgICAgcGF0aDogcGF0aCwKICAgICAgcmVsYXRpdmU6IHJlbGF0aXZlLAogICAgKTsKICB9CgogIGZpbmFsIFN0cmluZyBwYXRoOwogIGZpbmFsIGJvb2wgcmVsYXRpdmU7CgogIEBvdmVycmlkZQogIExpc3Q8T2JqZWN0Pz4gZ2V0IHByb3BzID0+IFtwYXRoLCByZWxhdGl2ZV07Cn0K", + "aW1wb3J0ICdkYXJ0OmlvJzsKaW1wb3J0ICdwYWNrYWdlOm1hc29uL21hc29uLmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6cGF0aC9wYXRoLmRhcnQnIGFzIHBhdGg7CmltcG9ydCAncGFja2FnZTpwdWJzcGVjX3BhcnNlL3B1YnNwZWNfcGFyc2UuZGFydCc7CgovLy8gRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBwcm9qZWN0IGluIHRoZSBwcm92aWRlZCBbd29ya2luZ0RpcmVjdG9yeV0KLy8vIGlzIGNvbmZpZ3VyZWQgdG8gdXNlIGByZXNvbHV0aW9uOiB3b3Jrc3BhY2VgLgpib29sIHVzZXNXb3Jrc3BhY2VSZXNvbHV0aW9uKAogIEhvb2tDb250ZXh0IGNvbnRleHQsIHsKICByZXF1aXJlZCBTdHJpbmcgd29ya2luZ0RpcmVjdG9yeSwKICByZXF1aXJlZCB2b2lkIEZ1bmN0aW9uKGludCBleGl0Q29kZSkgZXhpdCwKfSkgewogIGZpbmFsIHB1YnNwZWNGaWxlID0gRmlsZShwYXRoLmpvaW4od29ya2luZ0RpcmVjdG9yeSwgJ3B1YnNwZWMueWFtbCcpKTsKICBpZiAoIXB1YnNwZWNGaWxlLmV4aXN0c1N5bmMoKSkgcmV0dXJuIGZhbHNlOwoKICBmaW5hbCBQdWJzcGVjIHB1YnNwZWM7CiAgdHJ5IHsKICAgIHB1YnNwZWMgPSBQdWJzcGVjLnBhcnNlKHB1YnNwZWNGaWxlLnJlYWRBc1N0cmluZ1N5bmMoKSk7CiAgfSBvbiBFeGNlcHRpb24gY2F0Y2ggKGUpIHsKICAgIGNvbnRleHQubG9nZ2VyLmVycignJGUnKTsKICAgIGV4aXQoMSk7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICByZXR1cm4gcHVic3BlYy5yZXNvbHV0aW9uID09ICd3b3Jrc3BhY2UnOwp9Cg==", "type": "text" }, { "path": "post_gen.dart", "data": - "aW1wb3J0ICdkYXJ0OmFzeW5jJzsKaW1wb3J0ICdkYXJ0OmlvJyBhcyBpbzsKCmltcG9ydCAncGFja2FnZTpkYXJ0X2Zyb2dfcHJvZF9zZXJ2ZXJfaG9va3MvZGFydF9mcm9nX3Byb2Rfc2VydmVyX2hvb2tzLmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6bWFzb24vbWFzb24uZGFydCcgc2hvdyBIb29rQ29udGV4dCwgbGlnaHRDeWFuOwppbXBvcnQgJ3BhY2thZ2U6cGF0aC9wYXRoLmRhcnQnIGFzIHBhdGg7Cgp2b2lkIF9kZWZhdWx0RXhpdChpbnQgY29kZSkgPT4gRXhpdE92ZXJyaWRlcy5jdXJyZW50Py5leGl0ID8/IGlvLmV4aXQ7CgpGdXR1cmU8dm9pZD4gcnVuKEhvb2tDb250ZXh0IGNvbnRleHQpID0+IHBvc3RHZW4oY29udGV4dCk7CgpGdXR1cmU8dm9pZD4gcG9zdEdlbigKICBIb29rQ29udGV4dCBjb250ZXh0LCB7CiAgaW8uRGlyZWN0b3J5PyBkaXJlY3RvcnksCiAgUHJvY2Vzc1J1bm5lciBydW5Qcm9jZXNzID0gaW8uUHJvY2Vzcy5ydW4sCiAgdm9pZCBGdW5jdGlvbihpbnQgZXhpdENvZGUpIGV4aXQgPSBfZGVmYXVsdEV4aXQsCn0pIGFzeW5jIHsKICBmaW5hbCBwcm9qZWN0RGlyZWN0b3J5ID0gZGlyZWN0b3J5ID8/IGlvLkRpcmVjdG9yeS5jdXJyZW50OwogIGZpbmFsIGJ1aWxkRGlyZWN0b3J5UGF0aCA9IHBhdGguam9pbihwcm9qZWN0RGlyZWN0b3J5LnBhdGgsICdidWlsZCcpOwoKICBhd2FpdCBkYXJ0UHViR2V0KAogICAgY29udGV4dCwKICAgIHdvcmtpbmdEaXJlY3Rvcnk6IGJ1aWxkRGlyZWN0b3J5UGF0aCwKICAgIHJ1blByb2Nlc3M6IHJ1blByb2Nlc3MsCiAgICBleGl0OiBleGl0LAogICk7CgogIGZpbmFsIHJlbGF0aXZlQnVpbGRQYXRoID0gcGF0aC5yZWxhdGl2ZShidWlsZERpcmVjdG9yeVBhdGgpOwogIGNvbnRleHQubG9nZ2VyCiAgICAuLmluZm8oJycpCiAgICAuLnN1Y2Nlc3MoJ0NyZWF0ZWQgYSBwcm9kdWN0aW9uIGJ1aWxkIScpCiAgICAuLmluZm8oJycpCiAgICAuLmluZm8oJ1N0YXJ0IHRoZSBwcm9kdWN0aW9uIHNlcnZlciBieSBydW5uaW5nOicpCiAgICAuLmluZm8oJycpCiAgICAuLmluZm8oCiAgICAgICcnJyR7bGlnaHRDeWFuLndyYXAoJ2RhcnQgJHtwYXRoLmpvaW4ocmVsYXRpdmVCdWlsZFBhdGgsICdiaW4nLCAnc2VydmVyLmRhcnQnKX0nKX0nJycsCiAgICApOwp9Cg==", + "aW1wb3J0ICdkYXJ0OmFzeW5jJzsKaW1wb3J0ICdkYXJ0OmlvJyBhcyBpbzsKCmltcG9ydCAncGFja2FnZTpkYXJ0X2Zyb2dfcHJvZF9zZXJ2ZXJfaG9va3MvZGFydF9mcm9nX3Byb2Rfc2VydmVyX2hvb2tzLmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6bWFzb24vbWFzb24uZGFydCcgc2hvdyBIb29rQ29udGV4dCwgbGlnaHRDeWFuOwppbXBvcnQgJ3BhY2thZ2U6cGF0aC9wYXRoLmRhcnQnIGFzIHBhdGg7CgpGdXR1cmU8dm9pZD4gcnVuKEhvb2tDb250ZXh0IGNvbnRleHQpID0+IHBvc3RHZW4oY29udGV4dCk7CgpGdXR1cmU8dm9pZD4gcG9zdEdlbigKICBIb29rQ29udGV4dCBjb250ZXh0LCB7CiAgaW8uRGlyZWN0b3J5PyBkaXJlY3RvcnksCiAgUHJvY2Vzc1J1bm5lciBydW5Qcm9jZXNzID0gaW8uUHJvY2Vzcy5ydW4sCiAgdm9pZCBGdW5jdGlvbihpbnQgZXhpdENvZGUpIGV4aXQgPSBkZWZhdWx0RXhpdCwKfSkgYXN5bmMgewogIGZpbmFsIHByb2plY3REaXJlY3RvcnkgPSBkaXJlY3RvcnkgPz8gaW8uRGlyZWN0b3J5LmN1cnJlbnQ7CiAgZmluYWwgYnVpbGREaXJlY3RvcnlQYXRoID0gcGF0aC5qb2luKHByb2plY3REaXJlY3RvcnkucGF0aCwgJ2J1aWxkJyk7CgogIGF3YWl0IGRhcnRQdWJHZXQoCiAgICBjb250ZXh0LAogICAgd29ya2luZ0RpcmVjdG9yeTogYnVpbGREaXJlY3RvcnlQYXRoLAogICAgcnVuUHJvY2VzczogcnVuUHJvY2VzcywKICAgIGV4aXQ6IGV4aXQsCiAgKTsKCiAgZmluYWwgcmVsYXRpdmVCdWlsZFBhdGggPSBwYXRoLnJlbGF0aXZlKGJ1aWxkRGlyZWN0b3J5UGF0aCk7CiAgY29udGV4dC5sb2dnZXIKICAgIC4uaW5mbygnJykKICAgIC4uc3VjY2VzcygnQ3JlYXRlZCBhIHByb2R1Y3Rpb24gYnVpbGQhJykKICAgIC4uaW5mbygnJykKICAgIC4uaW5mbygnU3RhcnQgdGhlIHByb2R1Y3Rpb24gc2VydmVyIGJ5IHJ1bm5pbmc6JykKICAgIC4uaW5mbygnJykKICAgIC4uaW5mbygKICAgICAgJycnJHtsaWdodEN5YW4ud3JhcCgnZGFydCAke3BhdGguam9pbihyZWxhdGl2ZUJ1aWxkUGF0aCwgJ2JpbicsICdzZXJ2ZXIuZGFydCcpfScpfScnJywKICAgICk7Cn0K", "type": "text" }, { "path": "pre_gen.dart", "data": - "aW1wb3J0ICdkYXJ0OmFzeW5jJzsKaW1wb3J0ICdkYXJ0OmlvJyBhcyBpbzsKCmltcG9ydCAncGFja2FnZTpkYXJ0X2Zyb2dfZ2VuL2RhcnRfZnJvZ19nZW4uZGFydCc7CmltcG9ydCAncGFja2FnZTpkYXJ0X2Zyb2dfcHJvZF9zZXJ2ZXJfaG9va3MvZGFydF9mcm9nX3Byb2Rfc2VydmVyX2hvb2tzLmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6aW8vaW8uZGFydCcgYXMgaW9fZXhwYW5kZWQ7CmltcG9ydCAncGFja2FnZTptYXNvbi9tYXNvbi5kYXJ0JwogICAgc2hvdyBIb29rQ29udGV4dCwgZGVmYXVsdEZvcmVncm91bmQsIGxpZ2h0Q3lhbjsKaW1wb3J0ICdwYWNrYWdlOnBhdGgvcGF0aC5kYXJ0JyBhcyBwYXRoOwoKdHlwZWRlZiBSb3V0ZUNvbmZpZ3VyYXRpb25CdWlsZGVyID0gUm91dGVDb25maWd1cmF0aW9uIEZ1bmN0aW9uKAogIGlvLkRpcmVjdG9yeSBkaXJlY3RvcnksCik7Cgp2b2lkIF9kZWZhdWx0RXhpdChpbnQgY29kZSkgPT4gRXhpdE92ZXJyaWRlcy5jdXJyZW50Py5leGl0ID8/IGlvLmV4aXQ7CgpGdXR1cmU8dm9pZD4gcnVuKEhvb2tDb250ZXh0IGNvbnRleHQpID0+IHByZUdlbihjb250ZXh0KTsKCkZ1dHVyZTx2b2lkPiBwcmVHZW4oCiAgSG9va0NvbnRleHQgY29udGV4dCwgewogIGlvLkRpcmVjdG9yeT8gZGlyZWN0b3J5LAogIFByb2Nlc3NSdW5uZXIgcnVuUHJvY2VzcyA9IGlvLlByb2Nlc3MucnVuLAogIFJvdXRlQ29uZmlndXJhdGlvbkJ1aWxkZXIgYnVpbGRDb25maWd1cmF0aW9uID0gYnVpbGRSb3V0ZUNvbmZpZ3VyYXRpb24sCiAgdm9pZCBGdW5jdGlvbihpbnQgZXhpdENvZGUpIGV4aXQgPSBfZGVmYXVsdEV4aXQsCiAgRnV0dXJlPHZvaWQ+IEZ1bmN0aW9uKFN0cmluZyBmcm9tLCBTdHJpbmcgdG8pIGNvcHlQYXRoID0gaW9fZXhwYW5kZWQuY29weVBhdGgsCn0pIGFzeW5jIHsKICBmaW5hbCBwcm9qZWN0RGlyZWN0b3J5ID0gZGlyZWN0b3J5ID8/IGlvLkRpcmVjdG9yeS5jdXJyZW50OwoKICAvLyBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBwdWJzcGVjLmxvY2sgZmlsZSBpcyB1cCB0byBkYXRlCiAgYXdhaXQgZGFydFB1YkdldCgKICAgIGNvbnRleHQsCiAgICB3b3JraW5nRGlyZWN0b3J5OiBwcm9qZWN0RGlyZWN0b3J5LnBhdGgsCiAgICBydW5Qcm9jZXNzOiBydW5Qcm9jZXNzLAogICAgZXhpdDogZXhpdCwKICApOwoKICBmaW5hbCBidWlsZERpcmVjdG9yeSA9IGlvLkRpcmVjdG9yeSgKICAgIHBhdGguam9pbihwcm9qZWN0RGlyZWN0b3J5LnBhdGgsICdidWlsZCcpLAogICk7CgogIGF3YWl0IGNyZWF0ZUJ1bmRsZSgKICAgIGNvbnRleHQ6IGNvbnRleHQsCiAgICBwcm9qZWN0RGlyZWN0b3J5OiBwcm9qZWN0RGlyZWN0b3J5LAogICAgYnVpbGREaXJlY3Rvcnk6IGJ1aWxkRGlyZWN0b3J5LAogICAgZXhpdDogZXhpdCwKICApOwoKICBmaW5hbCBSb3V0ZUNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbjsKICB0cnkgewogICAgY29uZmlndXJhdGlvbiA9IGJ1aWxkQ29uZmlndXJhdGlvbihwcm9qZWN0RGlyZWN0b3J5KTsKICB9IG9uIEV4Y2VwdGlvbiBjYXRjaCAoZXJyb3IpIHsKICAgIGNvbnRleHQubG9nZ2VyLmVycignJGVycm9yJyk7CiAgICByZXR1cm4gZXhpdCgxKTsKICB9CgogIHJlcG9ydFJvdXRlQ29uZmxpY3RzKAogICAgY29uZmlndXJhdGlvbiwKICAgIG9uUm91dGVDb25mbGljdDogKAogICAgICBvcmlnaW5hbEZpbGVQYXRoLAogICAgICBjb25mbGljdGluZ0ZpbGVQYXRoLAogICAgICBjb25mbGljdGluZ0VuZHBvaW50LAogICAgKSB7CiAgICAgIGNvbnRleHQubG9nZ2VyLmVycigKICAgICAgICAnJydSb3V0ZSBjb25mbGljdCBkZXRlY3RlZC4gJHtsaWdodEN5YW4ud3JhcChvcmlnaW5hbEZpbGVQYXRoKX0gYW5kICR7bGlnaHRDeWFuLndyYXAoY29uZmxpY3RpbmdGaWxlUGF0aCl9IGJvdGggcmVzb2x2ZSB0byAke2xpZ2h0Q3lhbi53cmFwKGNvbmZsaWN0aW5nRW5kcG9pbnQpfS4nJycsCiAgICAgICk7CiAgICB9LAogICAgb25WaW9sYXRpb25FbmQ6ICgpIHsKICAgICAgZXhpdCgxKTsKICAgIH0sCiAgKTsKCiAgcmVwb3J0Um9ndWVSb3V0ZXMoCiAgICBjb25maWd1cmF0aW9uLAogICAgb25Sb2d1ZVJvdXRlOiAoZmlsZVBhdGgsIGlkZWFsUGF0aCkgewogICAgICBjb250ZXh0LmxvZ2dlci5lcnIoCiAgICAgICAgJycnUm9ndWUgcm91dGUgZGV0ZWN0ZWQuJHtkZWZhdWx0Rm9yZWdyb3VuZC53cmFwKCcgJyl9UmVuYW1lICR7bGlnaHRDeWFuLndyYXAoZmlsZVBhdGgpfSB0byAke2xpZ2h0Q3lhbi53cmFwKGlkZWFsUGF0aCl9LicnJywKICAgICAgKTsKICAgIH0sCiAgICBvblZpb2xhdGlvbkVuZDogKCkgewogICAgICBleGl0KDEpOwogICAgfSwKICApOwoKICBmaW5hbCBjdXN0b21Eb2NrZXJGaWxlID0gaW8uRmlsZSgKICAgIHBhdGguam9pbihwcm9qZWN0RGlyZWN0b3J5LnBhdGgsICdEb2NrZXJmaWxlJyksCiAgKTsKCiAgZmluYWwgaW50ZXJuYWxQYXRoRGVwZW5kZW5jaWVzID0gYXdhaXQgZ2V0SW50ZXJuYWxQYXRoRGVwZW5kZW5jaWVzKAogICAgcHJvamVjdERpcmVjdG9yeSwKICApOwoKICBmaW5hbCBleHRlcm5hbERlcGVuZGVuY2llcyA9IGF3YWl0IGNyZWF0ZUV4dGVybmFsUGFja2FnZXNGb2xkZXIoCiAgICBwcm9qZWN0RGlyZWN0b3J5OiBwcm9qZWN0RGlyZWN0b3J5LAogICAgYnVpbGREaXJlY3Rvcnk6IGJ1aWxkRGlyZWN0b3J5LAogICAgY29weVBhdGg6IGNvcHlQYXRoLAogICk7CgogIGZpbmFsIGFkZERvY2tlcmZpbGUgPSAhY3VzdG9tRG9ja2VyRmlsZS5leGlzdHNTeW5jKCk7CgogIGNvbnRleHQudmFycyA9IHsKICAgICdkaXJlY3Rvcmllcyc6IGNvbmZpZ3VyYXRpb24uZGlyZWN0b3JpZXMKICAgICAgICAubWFwKChjKSA9PiBjLnRvSnNvbigpKQogICAgICAgIC50b0xpc3QoKQogICAgICAgIC5yZXZlcnNlZAogICAgICAgIC50b0xpc3QoKSwKICAgICdyb3V0ZXMnOiBjb25maWd1cmF0aW9uLnJvdXRlcy5tYXAoKHIpID0+IHIudG9Kc29uKCkpLnRvTGlzdCgpLAogICAgJ21pZGRsZXdhcmUnOiBjb25maWd1cmF0aW9uLm1pZGRsZXdhcmUubWFwKChtKSA9PiBtLnRvSnNvbigpKS50b0xpc3QoKSwKICAgICdnbG9iYWxNaWRkbGV3YXJlJzogY29uZmlndXJhdGlvbi5nbG9iYWxNaWRkbGV3YXJlICE9IG51bGwKICAgICAgICA/IGNvbmZpZ3VyYXRpb24uZ2xvYmFsTWlkZGxld2FyZSEudG9Kc29uKCkKICAgICAgICA6IGZhbHNlLAogICAgJ3NlcnZlU3RhdGljRmlsZXMnOiBjb25maWd1cmF0aW9uLnNlcnZlU3RhdGljRmlsZXMsCiAgICAnaW52b2tlQ3VzdG9tRW50cnlwb2ludCc6IGNvbmZpZ3VyYXRpb24uaW52b2tlQ3VzdG9tRW50cnlwb2ludCwKICAgICdpbnZva2VDdXN0b21Jbml0JzogY29uZmlndXJhdGlvbi5pbnZva2VDdXN0b21Jbml0LAogICAgJ3BhdGhEZXBlbmRlbmNpZXMnOiBpbnRlcm5hbFBhdGhEZXBlbmRlbmNpZXMsCiAgICAnaGFzRXh0ZXJuYWxEZXBlbmRlbmNpZXMnOiBleHRlcm5hbERlcGVuZGVuY2llcy5pc05vdEVtcHR5LAogICAgJ2RhcnRWZXJzaW9uJzogY29udGV4dC52YXJzWydkYXJ0VmVyc2lvbiddLAogICAgJ2FkZERvY2tlcmZpbGUnOiBhZGREb2NrZXJmaWxlLAogIH07Cn0K", + "aW1wb3J0ICdkYXJ0OmFzeW5jJzsKaW1wb3J0ICdkYXJ0OmlvJyBhcyBpbzsKCmltcG9ydCAncGFja2FnZTpkYXJ0X2Zyb2dfZ2VuL2RhcnRfZnJvZ19nZW4uZGFydCc7CmltcG9ydCAncGFja2FnZTpkYXJ0X2Zyb2dfcHJvZF9zZXJ2ZXJfaG9va3MvZGFydF9mcm9nX3Byb2Rfc2VydmVyX2hvb2tzLmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6aW8vaW8uZGFydCcgYXMgaW9fZXhwYW5kZWQ7CmltcG9ydCAncGFja2FnZTptYXNvbi9tYXNvbi5kYXJ0JwogICAgc2hvdyBIb29rQ29udGV4dCwgZGVmYXVsdEZvcmVncm91bmQsIGxpZ2h0Q3lhbjsKaW1wb3J0ICdwYWNrYWdlOnBhdGgvcGF0aC5kYXJ0JyBhcyBwYXRoOwoKdHlwZWRlZiBSb3V0ZUNvbmZpZ3VyYXRpb25CdWlsZGVyID0gUm91dGVDb25maWd1cmF0aW9uIEZ1bmN0aW9uKAogIGlvLkRpcmVjdG9yeSBkaXJlY3RvcnksCik7CgpGdXR1cmU8dm9pZD4gcnVuKEhvb2tDb250ZXh0IGNvbnRleHQpID0+IHByZUdlbihjb250ZXh0KTsKCkZ1dHVyZTx2b2lkPiBwcmVHZW4oCiAgSG9va0NvbnRleHQgY29udGV4dCwgewogIGlvLkRpcmVjdG9yeT8gZGlyZWN0b3J5LAogIFByb2Nlc3NSdW5uZXIgcnVuUHJvY2VzcyA9IGlvLlByb2Nlc3MucnVuLAogIFJvdXRlQ29uZmlndXJhdGlvbkJ1aWxkZXIgYnVpbGRDb25maWd1cmF0aW9uID0gYnVpbGRSb3V0ZUNvbmZpZ3VyYXRpb24sCiAgdm9pZCBGdW5jdGlvbihpbnQgZXhpdENvZGUpIGV4aXQgPSBkZWZhdWx0RXhpdCwKICBGdXR1cmU8dm9pZD4gRnVuY3Rpb24oU3RyaW5nIGZyb20sIFN0cmluZyB0bykgY29weVBhdGggPSBpb19leHBhbmRlZC5jb3B5UGF0aCwKfSkgYXN5bmMgewogIGZpbmFsIHByb2plY3REaXJlY3RvcnkgPSBkaXJlY3RvcnkgPz8gaW8uRGlyZWN0b3J5LmN1cnJlbnQ7CiAgZmluYWwgYnVpbGREaXJlY3RvcnkgPSBpby5EaXJlY3RvcnkoCiAgICBwYXRoLmpvaW4ocHJvamVjdERpcmVjdG9yeS5wYXRoLCAnYnVpbGQnKSwKICApOwogIGZpbmFsIHVzZXNXb3Jrc3BhY2VzID0gdXNlc1dvcmtzcGFjZVJlc29sdXRpb24oCiAgICBjb250ZXh0LAogICAgd29ya2luZ0RpcmVjdG9yeTogcHJvamVjdERpcmVjdG9yeS5wYXRoLAogICAgZXhpdDogZXhpdCwKICApOwoKICBhd2FpdCBjcmVhdGVCdW5kbGUoCiAgICBjb250ZXh0OiBjb250ZXh0LAogICAgcHJvamVjdERpcmVjdG9yeTogcHJvamVjdERpcmVjdG9yeSwKICAgIGJ1aWxkRGlyZWN0b3J5OiBidWlsZERpcmVjdG9yeSwKICAgIGV4aXQ6IGV4aXQsCiAgKTsKCiAgaWYgKHVzZXNXb3Jrc3BhY2VzKSB7CiAgICAvLyBEaXNhYmxlIHdvcmtzcGFjZSByZXNvbHV0aW9uIHVudGlsIHdlIGNhbiBnZW5lcmF0ZSBwZXItcGFja2FnZSBsb2NrZmlsZXMuCiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZGFydC1sYW5nL3B1Yi9pc3N1ZXMvNDU5NAogICAgZGlzYWJsZVdvcmtzcGFjZVJlc29sdXRpb24oCiAgICAgIGNvbnRleHQsCiAgICAgIGJ1aWxkRGlyZWN0b3J5OiBidWlsZERpcmVjdG9yeS5wYXRoLAogICAgICBleGl0OiBleGl0LAogICAgKTsKICAgIC8vIENvcHkgdGhlIHB1YnNwZWMubG9jayBmcm9tIHRoZSB3b3Jrc3BhY2Ugcm9vdCB0byBlbnN1cmUgdGhlIHNhbWUgdmVyc2lvbnMKICAgIC8vIG9mIGRlcGVuZGVuY2llcyBhcmUgdXNlZCBpbiB0aGUgcHJvZHVjdGlvbiBidWlsZC4KICAgIGNvcHlXb3Jrc3BhY2VQdWJzcGVjTG9jaygKICAgICAgY29udGV4dCwKICAgICAgYnVpbGREaXJlY3Rvcnk6IGJ1aWxkRGlyZWN0b3J5LnBhdGgsCiAgICAgIHdvcmtpbmdEaXJlY3Rvcnk6IHByb2plY3REaXJlY3RvcnkucGF0aCwKICAgICAgZXhpdDogZXhpdCwKICAgICk7CiAgfQoKICBmaW5hbCBSb3V0ZUNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbjsKICB0cnkgewogICAgY29uZmlndXJhdGlvbiA9IGJ1aWxkQ29uZmlndXJhdGlvbihwcm9qZWN0RGlyZWN0b3J5KTsKICB9IG9uIEV4Y2VwdGlvbiBjYXRjaCAoZXJyb3IpIHsKICAgIGNvbnRleHQubG9nZ2VyLmVycignJGVycm9yJyk7CiAgICByZXR1cm4gZXhpdCgxKTsKICB9CgogIHJlcG9ydFJvdXRlQ29uZmxpY3RzKAogICAgY29uZmlndXJhdGlvbiwKICAgIG9uUm91dGVDb25mbGljdDogKAogICAgICBvcmlnaW5hbEZpbGVQYXRoLAogICAgICBjb25mbGljdGluZ0ZpbGVQYXRoLAogICAgICBjb25mbGljdGluZ0VuZHBvaW50LAogICAgKSB7CiAgICAgIGNvbnRleHQubG9nZ2VyLmVycigKICAgICAgICAnJydSb3V0ZSBjb25mbGljdCBkZXRlY3RlZC4gJHtsaWdodEN5YW4ud3JhcChvcmlnaW5hbEZpbGVQYXRoKX0gYW5kICR7bGlnaHRDeWFuLndyYXAoY29uZmxpY3RpbmdGaWxlUGF0aCl9IGJvdGggcmVzb2x2ZSB0byAke2xpZ2h0Q3lhbi53cmFwKGNvbmZsaWN0aW5nRW5kcG9pbnQpfS4nJycsCiAgICAgICk7CiAgICB9LAogICAgb25WaW9sYXRpb25FbmQ6ICgpID0+IGV4aXQoMSksCiAgKTsKCiAgcmVwb3J0Um9ndWVSb3V0ZXMoCiAgICBjb25maWd1cmF0aW9uLAogICAgb25Sb2d1ZVJvdXRlOiAoZmlsZVBhdGgsIGlkZWFsUGF0aCkgewogICAgICBjb250ZXh0LmxvZ2dlci5lcnIoCiAgICAgICAgJycnUm9ndWUgcm91dGUgZGV0ZWN0ZWQuJHtkZWZhdWx0Rm9yZWdyb3VuZC53cmFwKCcgJyl9UmVuYW1lICR7bGlnaHRDeWFuLndyYXAoZmlsZVBhdGgpfSB0byAke2xpZ2h0Q3lhbi53cmFwKGlkZWFsUGF0aCl9LicnJywKICAgICAgKTsKICAgIH0sCiAgICBvblZpb2xhdGlvbkVuZDogKCkgPT4gZXhpdCgxKSwKICApOwoKICBmaW5hbCBjdXN0b21Eb2NrZXJGaWxlID0gaW8uRmlsZSgKICAgIHBhdGguam9pbihwcm9qZWN0RGlyZWN0b3J5LnBhdGgsICdEb2NrZXJmaWxlJyksCiAgKTsKCiAgZmluYWwgaW50ZXJuYWxQYXRoRGVwZW5kZW5jaWVzID0gYXdhaXQgZ2V0SW50ZXJuYWxQYXRoRGVwZW5kZW5jaWVzKAogICAgcHJvamVjdERpcmVjdG9yeSwKICApOwoKICBmaW5hbCBleHRlcm5hbERlcGVuZGVuY2llcyA9IGF3YWl0IGNyZWF0ZUV4dGVybmFsUGFja2FnZXNGb2xkZXIoCiAgICBwcm9qZWN0RGlyZWN0b3J5OiBwcm9qZWN0RGlyZWN0b3J5LAogICAgYnVpbGREaXJlY3Rvcnk6IGJ1aWxkRGlyZWN0b3J5LAogICAgY29weVBhdGg6IGNvcHlQYXRoLAogICk7CgogIGZpbmFsIGFkZERvY2tlcmZpbGUgPSAhY3VzdG9tRG9ja2VyRmlsZS5leGlzdHNTeW5jKCk7CgogIGNvbnRleHQudmFycyA9IHsKICAgICdkaXJlY3Rvcmllcyc6IGNvbmZpZ3VyYXRpb24uZGlyZWN0b3JpZXMKICAgICAgICAubWFwKChjKSA9PiBjLnRvSnNvbigpKQogICAgICAgIC50b0xpc3QoKQogICAgICAgIC5yZXZlcnNlZAogICAgICAgIC50b0xpc3QoKSwKICAgICdyb3V0ZXMnOiBjb25maWd1cmF0aW9uLnJvdXRlcy5tYXAoKHIpID0+IHIudG9Kc29uKCkpLnRvTGlzdCgpLAogICAgJ21pZGRsZXdhcmUnOiBjb25maWd1cmF0aW9uLm1pZGRsZXdhcmUubWFwKChtKSA9PiBtLnRvSnNvbigpKS50b0xpc3QoKSwKICAgICdnbG9iYWxNaWRkbGV3YXJlJzogY29uZmlndXJhdGlvbi5nbG9iYWxNaWRkbGV3YXJlICE9IG51bGwKICAgICAgICA/IGNvbmZpZ3VyYXRpb24uZ2xvYmFsTWlkZGxld2FyZSEudG9Kc29uKCkKICAgICAgICA6IGZhbHNlLAogICAgJ3NlcnZlU3RhdGljRmlsZXMnOiBjb25maWd1cmF0aW9uLnNlcnZlU3RhdGljRmlsZXMsCiAgICAnaW52b2tlQ3VzdG9tRW50cnlwb2ludCc6IGNvbmZpZ3VyYXRpb24uaW52b2tlQ3VzdG9tRW50cnlwb2ludCwKICAgICdpbnZva2VDdXN0b21Jbml0JzogY29uZmlndXJhdGlvbi5pbnZva2VDdXN0b21Jbml0LAogICAgJ3BhdGhEZXBlbmRlbmNpZXMnOiBpbnRlcm5hbFBhdGhEZXBlbmRlbmNpZXMsCiAgICAnaGFzRXh0ZXJuYWxEZXBlbmRlbmNpZXMnOiBleHRlcm5hbERlcGVuZGVuY2llcy5pc05vdEVtcHR5LAogICAgJ2RhcnRWZXJzaW9uJzogY29udGV4dC52YXJzWydkYXJ0VmVyc2lvbiddLAogICAgJ2FkZERvY2tlcmZpbGUnOiBhZGREb2NrZXJmaWxlLAogIH07Cn0K", "type": "text" }, { "path": "pubspec.yaml", "data": - "bmFtZTogZGFydF9mcm9nX3Byb2Rfc2VydmVyX2hvb2tzCnB1Ymxpc2hfdG86IG5vbmUKCmVudmlyb25tZW50OgogIHNkazogIj49My4wLjAgPDQuMC4wIgoKZGVwZW5kZW5jaWVzOgogIGRhcnRfZnJvZ19nZW46IF4yLjAuMAogIGVxdWF0YWJsZTogXjIuMC41CiAgaW86IF4xLjAuMwogIG1hc29uOiBeMC4xLjAKICBwYXRoOiBeMS44LjEKICB5YW1sOiBeMy4xLjIKCmRldl9kZXBlbmRlbmNpZXM6CiAgbW9ja3RhaWw6IF4xLjAuMAogIHRlc3Q6IF4xLjI1LjAKICB2ZXJ5X2dvb2RfYW5hbHlzaXM6IF45LjAuMAo=", + "bmFtZTogZGFydF9mcm9nX3Byb2Rfc2VydmVyX2hvb2tzCnB1Ymxpc2hfdG86IG5vbmUKCmVudmlyb25tZW50OgogIHNkazogIj49My4wLjAgPDQuMC4wIgoKZGVwZW5kZW5jaWVzOgogIGRhcnRfZnJvZ19nZW46IF4yLjAuMAogIGVxdWF0YWJsZTogXjIuMC41CiAgaW86IF4xLjAuMwogIG1hc29uOiBeMC4xLjAKICBwYXRoOiBeMS44LjEKICBwdWJzcGVjX3BhcnNlOiBeMS41LjAKICB5YW1sOiBeMy4xLjIKCmRldl9kZXBlbmRlbmNpZXM6CiAgbW9ja3RhaWw6IF4xLjAuMAogIHRlc3Q6IF4xLjI1LjAKICB2ZXJ5X2dvb2RfYW5hbHlzaXM6IF45LjAuMAo=", "type": "text" }, { "path": "test/post_gen_test.dart", "data": - "aW1wb3J0ICdkYXJ0OmlvJzsKCmltcG9ydCAncGFja2FnZTpkYXJ0X2Zyb2dfcHJvZF9zZXJ2ZXJfaG9va3MvZGFydF9mcm9nX3Byb2Rfc2VydmVyX2hvb2tzLmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6bWFzb24vbWFzb24uZGFydCcKICAgIHNob3cgRXhpdENvZGUsIEhvb2tDb250ZXh0LCBMb2dnZXIsIFByb2dyZXNzLCBsaWdodEN5YW47CmltcG9ydCAncGFja2FnZTptb2NrdGFpbC9tb2NrdGFpbC5kYXJ0JzsKaW1wb3J0ICdwYWNrYWdlOnBhdGgvcGF0aC5kYXJ0JyBhcyBwYXRoOwppbXBvcnQgJ3BhY2thZ2U6dGVzdC90ZXN0LmRhcnQnOwoKaW1wb3J0ICcuLi9wb3N0X2dlbi5kYXJ0JyBhcyBwb3N0X2dlbjsKCmNsYXNzIF9GYWtlSG9va0NvbnRleHQgZXh0ZW5kcyBGYWtlIGltcGxlbWVudHMgSG9va0NvbnRleHQgewogIF9GYWtlSG9va0NvbnRleHQoe0xvZ2dlcj8gbG9nZ2VyfSkgOiBfbG9nZ2VyID0gbG9nZ2VyID8/IF9Nb2NrTG9nZ2VyKCk7CgogIGZpbmFsIExvZ2dlciBfbG9nZ2VyOwoKICB2YXIgX3ZhcnMgPSA8U3RyaW5nLCBkeW5hbWljPnt9OwoKICBAb3ZlcnJpZGUKICBNYXA8U3RyaW5nLCBkeW5hbWljPiBnZXQgdmFycyA9PiBfdmFyczsKCiAgQG92ZXJyaWRlCiAgc2V0IHZhcnMoTWFwPFN0cmluZywgZHluYW1pYz4gdmFsdWUpID0+IF92YXJzID0gdmFsdWU7CgogIEBvdmVycmlkZQogIExvZ2dlciBnZXQgbG9nZ2VyID0+IF9sb2dnZXI7Cn0KCmNsYXNzIF9Nb2NrTG9nZ2VyIGV4dGVuZHMgTW9jayBpbXBsZW1lbnRzIExvZ2dlciB7fQoKY2xhc3MgX01vY2tQcm9ncmVzcyBleHRlbmRzIE1vY2sgaW1wbGVtZW50cyBQcm9ncmVzcyB7fQoKdm9pZCBtYWluKCkgewogIGdyb3VwKCdwb3N0R2VuJywgKCkgewogICAgbGF0ZSBIb29rQ29udGV4dCBjb250ZXh0OwogICAgbGF0ZSBMb2dnZXIgbG9nZ2VyOwoKICAgIGNvbnN0IHByb2Nlc3NJZCA9IDQyOwogICAgZmluYWwgcHJvY2Vzc1Jlc3VsdCA9IFByb2Nlc3NSZXN1bHQoCiAgICAgIHByb2Nlc3NJZCwKICAgICAgRXhpdENvZGUuc3VjY2Vzcy5jb2RlLAogICAgICAnJywKICAgICAgJycsCiAgICApOwoKICAgIHNldFVwKCgpIHsKICAgICAgbG9nZ2VyID0gX01vY2tMb2dnZXIoKTsKICAgICAgY29udGV4dCA9IF9GYWtlSG9va0NvbnRleHQobG9nZ2VyOiBsb2dnZXIpOwoKICAgICAgd2hlbigoKSA9PiBsb2dnZXIucHJvZ3Jlc3MoYW55KCkpKS50aGVuUmV0dXJuKF9Nb2NrUHJvZ3Jlc3MoKSk7CiAgICB9KTsKCiAgICB0ZXN0KCdydW4gY29tcGxldGVzJywgKCkgewogICAgICBleHBlY3QoCiAgICAgICAgRXhpdE92ZXJyaWRlcy5ydW5ab25lZCgKICAgICAgICAgICgpID0+IHBvc3RfZ2VuLnJ1bihfRmFrZUhvb2tDb250ZXh0KGxvZ2dlcjogbG9nZ2VyKSksCiAgICAgICAgICBleGl0OiAoXykge30sCiAgICAgICAgKSwKICAgICAgICBjb21wbGV0ZXMsCiAgICAgICk7CiAgICB9KTsKCiAgICB0ZXN0KCdydW5zIGRhcnQgcHViIGdldCBhbmQgb3V0cHV0cyBuZXh0IHN0ZXBzJywgKCkgYXN5bmMgewogICAgICB2YXIgcHJvY2Vzc1J1bm5lckNhbGxDb3VudCA9IDA7CiAgICAgIGZpbmFsIGV4aXRDYWxscyA9IDxpbnQ+W107CgogICAgICBhd2FpdCBwb3N0X2dlbi5wb3N0R2VuKAogICAgICAgIGNvbnRleHQsCiAgICAgICAgcnVuUHJvY2VzczogKAogICAgICAgICAgZXhlY3V0YWJsZSwKICAgICAgICAgIGFyZ3MsIHsKICAgICAgICAgIFN0cmluZz8gd29ya2luZ0RpcmVjdG9yeSwKICAgICAgICAgIGJvb2w/IHJ1bkluU2hlbGwsCiAgICAgICAgfSkgYXN5bmMgewogICAgICAgICAgcHJvY2Vzc1J1bm5lckNhbGxDb3VudCsrOwogICAgICAgICAgZXhwZWN0KGV4ZWN1dGFibGUsIGVxdWFscygnZGFydCcpKTsKICAgICAgICAgIGV4cGVjdChhcmdzLCBlcXVhbHMoWydwdWInLCAnZ2V0J10pKTsKICAgICAgICAgIGV4cGVjdCgKICAgICAgICAgICAgd29ya2luZ0RpcmVjdG9yeSwKICAgICAgICAgICAgZXF1YWxzKHBhdGguam9pbihEaXJlY3RvcnkuY3VycmVudC5wYXRoLCAnYnVpbGQnKSksCiAgICAgICAgICApOwogICAgICAgICAgZXhwZWN0KHJ1bkluU2hlbGwsIGlzVHJ1ZSk7CiAgICAgICAgICByZXR1cm4gcHJvY2Vzc1Jlc3VsdDsKICAgICAgICB9LAogICAgICAgIGV4aXQ6IGV4aXRDYWxscy5hZGQsCiAgICAgICk7CiAgICAgIGV4cGVjdChwcm9jZXNzUnVubmVyQ2FsbENvdW50LCBlcXVhbHMoMSkpOwogICAgICBleHBlY3QoZXhpdENhbGxzLCBpc0VtcHR5KTsKICAgICAgdmVyaWZ5KCgpID0+IGxvZ2dlci5zdWNjZXNzKCdDcmVhdGVkIGEgcHJvZHVjdGlvbiBidWlsZCEnKSkuY2FsbGVkKDEpOwogICAgICB2ZXJpZnkoCiAgICAgICAgKCkgPT4gbG9nZ2VyLmluZm8oJ1N0YXJ0IHRoZSBwcm9kdWN0aW9uIHNlcnZlciBieSBydW5uaW5nOicpLAogICAgICApLmNhbGxlZCgxKTsKICAgICAgdmVyaWZ5KAogICAgICAgICgpID0+IGxvZ2dlci5pbmZvKCcke2xpZ2h0Q3lhbi53cmFwKCdkYXJ0IGJ1aWxkL2Jpbi9zZXJ2ZXIuZGFydCcpfScpLAogICAgICApLmNhbGxlZCgxKTsKICAgICAgdmVyaWZ5TmV2ZXIoKCkgPT4gbG9nZ2VyLmVycihhbnkoKSkpOwogICAgfSk7CiAgfSk7Cn0K", + "aW1wb3J0ICdkYXJ0OmlvJzsKCmltcG9ydCAncGFja2FnZTpkYXJ0X2Zyb2dfcHJvZF9zZXJ2ZXJfaG9va3MvZGFydF9mcm9nX3Byb2Rfc2VydmVyX2hvb2tzLmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6bWFzb24vbWFzb24uZGFydCcKICAgIHNob3cgRXhpdENvZGUsIEhvb2tDb250ZXh0LCBMb2dnZXIsIFByb2dyZXNzLCBsaWdodEN5YW47CmltcG9ydCAncGFja2FnZTptb2NrdGFpbC9tb2NrdGFpbC5kYXJ0JzsKaW1wb3J0ICdwYWNrYWdlOnBhdGgvcGF0aC5kYXJ0JyBhcyBwYXRoOwppbXBvcnQgJ3BhY2thZ2U6dGVzdC90ZXN0LmRhcnQnOwoKaW1wb3J0ICcuLi9wb3N0X2dlbi5kYXJ0JyBhcyBwb3N0X2dlbjsKCmNsYXNzIF9GYWtlSG9va0NvbnRleHQgZXh0ZW5kcyBGYWtlIGltcGxlbWVudHMgSG9va0NvbnRleHQgewogIF9GYWtlSG9va0NvbnRleHQoe0xvZ2dlcj8gbG9nZ2VyfSkgOiBfbG9nZ2VyID0gbG9nZ2VyID8/IF9Nb2NrTG9nZ2VyKCk7CgogIGZpbmFsIExvZ2dlciBfbG9nZ2VyOwoKICB2YXIgX3ZhcnMgPSA8U3RyaW5nLCBkeW5hbWljPnt9OwoKICBAb3ZlcnJpZGUKICBNYXA8U3RyaW5nLCBkeW5hbWljPiBnZXQgdmFycyA9PiBfdmFyczsKCiAgQG92ZXJyaWRlCiAgc2V0IHZhcnMoTWFwPFN0cmluZywgZHluYW1pYz4gdmFsdWUpID0+IF92YXJzID0gdmFsdWU7CgogIEBvdmVycmlkZQogIExvZ2dlciBnZXQgbG9nZ2VyID0+IF9sb2dnZXI7Cn0KCmNsYXNzIF9Nb2NrTG9nZ2VyIGV4dGVuZHMgTW9jayBpbXBsZW1lbnRzIExvZ2dlciB7fQoKY2xhc3MgX01vY2tQcm9ncmVzcyBleHRlbmRzIE1vY2sgaW1wbGVtZW50cyBQcm9ncmVzcyB7fQoKdm9pZCBtYWluKCkgewogIGdyb3VwKCdwb3N0R2VuJywgKCkgewogICAgbGF0ZSBIb29rQ29udGV4dCBjb250ZXh0OwogICAgbGF0ZSBMb2dnZXIgbG9nZ2VyOwoKICAgIGNvbnN0IHByb2Nlc3NJZCA9IDQyOwogICAgZmluYWwgcHJvY2Vzc1Jlc3VsdCA9IFByb2Nlc3NSZXN1bHQoCiAgICAgIHByb2Nlc3NJZCwKICAgICAgRXhpdENvZGUuc3VjY2Vzcy5jb2RlLAogICAgICAnJywKICAgICAgJycsCiAgICApOwoKICAgIHNldFVwKCgpIHsKICAgICAgbG9nZ2VyID0gX01vY2tMb2dnZXIoKTsKICAgICAgY29udGV4dCA9IF9GYWtlSG9va0NvbnRleHQobG9nZ2VyOiBsb2dnZXIpOwoKICAgICAgd2hlbigoKSA9PiBsb2dnZXIucHJvZ3Jlc3MoYW55KCkpKS50aGVuUmV0dXJuKF9Nb2NrUHJvZ3Jlc3MoKSk7CiAgICB9KTsKCiAgICB0ZXN0KCdydW4gY29tcGxldGVzJywgKCkgewogICAgICBleHBlY3QoCiAgICAgICAgRXhpdE92ZXJyaWRlcy5ydW5ab25lZCgKICAgICAgICAgICgpID0+IHBvc3RfZ2VuLnJ1bihfRmFrZUhvb2tDb250ZXh0KGxvZ2dlcjogbG9nZ2VyKSksCiAgICAgICAgKSwKICAgICAgICBjb21wbGV0ZXMsCiAgICAgICk7CiAgICB9KTsKCiAgICB0ZXN0KCdydW5zIGRhcnQgcHViIGdldCBhbmQgb3V0cHV0cyBuZXh0IHN0ZXBzJywgKCkgYXN5bmMgewogICAgICB2YXIgcHJvY2Vzc1J1bm5lckNhbGxDb3VudCA9IDA7CiAgICAgIGZpbmFsIGV4aXRDYWxscyA9IDxpbnQ+W107CgogICAgICBhd2FpdCBwb3N0X2dlbi5wb3N0R2VuKAogICAgICAgIGNvbnRleHQsCiAgICAgICAgcnVuUHJvY2VzczogKAogICAgICAgICAgZXhlY3V0YWJsZSwKICAgICAgICAgIGFyZ3MsIHsKICAgICAgICAgIFN0cmluZz8gd29ya2luZ0RpcmVjdG9yeSwKICAgICAgICAgIGJvb2w/IHJ1bkluU2hlbGwsCiAgICAgICAgfSkgYXN5bmMgewogICAgICAgICAgcHJvY2Vzc1J1bm5lckNhbGxDb3VudCsrOwogICAgICAgICAgZXhwZWN0KGV4ZWN1dGFibGUsIGVxdWFscygnZGFydCcpKTsKICAgICAgICAgIGV4cGVjdChhcmdzLCBlcXVhbHMoWydwdWInLCAnZ2V0J10pKTsKICAgICAgICAgIGV4cGVjdCgKICAgICAgICAgICAgd29ya2luZ0RpcmVjdG9yeSwKICAgICAgICAgICAgZXF1YWxzKHBhdGguam9pbihEaXJlY3RvcnkuY3VycmVudC5wYXRoLCAnYnVpbGQnKSksCiAgICAgICAgICApOwogICAgICAgICAgZXhwZWN0KHJ1bkluU2hlbGwsIGlzVHJ1ZSk7CiAgICAgICAgICByZXR1cm4gcHJvY2Vzc1Jlc3VsdDsKICAgICAgICB9LAogICAgICAgIGV4aXQ6IGV4aXRDYWxscy5hZGQsCiAgICAgICk7CiAgICAgIGV4cGVjdChwcm9jZXNzUnVubmVyQ2FsbENvdW50LCBlcXVhbHMoMSkpOwogICAgICBleHBlY3QoZXhpdENhbGxzLCBpc0VtcHR5KTsKICAgICAgdmVyaWZ5KCgpID0+IGxvZ2dlci5zdWNjZXNzKCdDcmVhdGVkIGEgcHJvZHVjdGlvbiBidWlsZCEnKSkuY2FsbGVkKDEpOwogICAgICB2ZXJpZnkoCiAgICAgICAgKCkgPT4gbG9nZ2VyLmluZm8oJ1N0YXJ0IHRoZSBwcm9kdWN0aW9uIHNlcnZlciBieSBydW5uaW5nOicpLAogICAgICApLmNhbGxlZCgxKTsKICAgICAgdmVyaWZ5KAogICAgICAgICgpID0+IGxvZ2dlci5pbmZvKCcke2xpZ2h0Q3lhbi53cmFwKCdkYXJ0IGJ1aWxkL2Jpbi9zZXJ2ZXIuZGFydCcpfScpLAogICAgICApLmNhbGxlZCgxKTsKICAgICAgdmVyaWZ5TmV2ZXIoKCkgPT4gbG9nZ2VyLmVycihhbnkoKSkpOwogICAgfSk7CiAgfSk7Cn0K", "type": "text" }, { "path": "test/pre_gen_test.dart", "data": - "aW1wb3J0ICdkYXJ0OmlvJzsKCmltcG9ydCAncGFja2FnZTpkYXJ0X2Zyb2dfZ2VuL2RhcnRfZnJvZ19nZW4uZGFydCc7CmltcG9ydCAncGFja2FnZTpkYXJ0X2Zyb2dfcHJvZF9zZXJ2ZXJfaG9va3MvZGFydF9mcm9nX3Byb2Rfc2VydmVyX2hvb2tzLmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6bWFzb24vbWFzb24uZGFydCcKICAgIHNob3cgSG9va0NvbnRleHQsIExvZ2dlciwgUHJvZ3Jlc3MsIGRlZmF1bHRGb3JlZ3JvdW5kLCBsaWdodEN5YW47CmltcG9ydCAncGFja2FnZTptb2NrdGFpbC9tb2NrdGFpbC5kYXJ0JzsKaW1wb3J0ICdwYWNrYWdlOnBhdGgvcGF0aC5kYXJ0JyBhcyBwYXRoOwppbXBvcnQgJ3BhY2thZ2U6dGVzdC90ZXN0LmRhcnQnOwoKaW1wb3J0ICcuLi9wcmVfZ2VuLmRhcnQnIGFzIHByZV9nZW47CmltcG9ydCAncHVic3BlY19sb2Nrcy5kYXJ0JzsKCmNsYXNzIF9GYWtlSG9va0NvbnRleHQgZXh0ZW5kcyBGYWtlIGltcGxlbWVudHMgSG9va0NvbnRleHQgewogIF9GYWtlSG9va0NvbnRleHQoe0xvZ2dlcj8gbG9nZ2VyfSkgOiBfbG9nZ2VyID0gbG9nZ2VyID8/IF9Nb2NrTG9nZ2VyKCk7CgogIGZpbmFsIExvZ2dlciBfbG9nZ2VyOwoKICB2YXIgX3ZhcnMgPSA8U3RyaW5nLCBkeW5hbWljPnt9OwoKICBAb3ZlcnJpZGUKICBNYXA8U3RyaW5nLCBkeW5hbWljPiBnZXQgdmFycyA9PiBfdmFyczsKCiAgQG92ZXJyaWRlCiAgc2V0IHZhcnMoTWFwPFN0cmluZywgZHluYW1pYz4gdmFsdWUpID0+IF92YXJzID0gdmFsdWU7CgogIEBvdmVycmlkZQogIExvZ2dlciBnZXQgbG9nZ2VyID0+IF9sb2dnZXI7Cn0KCmNsYXNzIF9Nb2NrTG9nZ2VyIGV4dGVuZHMgTW9jayBpbXBsZW1lbnRzIExvZ2dlciB7fQoKY2xhc3MgX01vY2tQcm9ncmVzcyBleHRlbmRzIE1vY2sgaW1wbGVtZW50cyBQcm9ncmVzcyB7fQoKdm9pZCBtYWluKCkgewogIGdyb3VwKCdwcmVHZW4nLCAoKSB7CiAgICBsYXRlIEhvb2tDb250ZXh0IGNvbnRleHQ7CiAgICBsYXRlIExvZ2dlciBsb2dnZXI7CgogICAgRnV0dXJlPFByb2Nlc3NSZXN1bHQ+IHN1Y2Nlc3NSdW5Qcm9jZXNzKAogICAgICBleGVjdXRhYmxlLAogICAgICBhcmdzLCB7CiAgICAgIFN0cmluZz8gd29ya2luZ0RpcmVjdG9yeSwKICAgICAgYm9vbD8gcnVuSW5TaGVsbCwKICAgIH0pID0+CiAgICAgICAgRnV0dXJlLnZhbHVlKFByb2Nlc3NSZXN1bHQoMCwgMCwgJycsICcnKSk7CgogICAgc2V0VXAoKCkgewogICAgICBsb2dnZXIgPSBfTW9ja0xvZ2dlcigpOwogICAgICBjb250ZXh0ID0gX0Zha2VIb29rQ29udGV4dChsb2dnZXI6IGxvZ2dlcikKICAgICAgICAuLnZhcnNbJ2RhcnRWZXJzaW9uJ10gPSAnc3RhYmxlJzsKCiAgICAgIHdoZW4oKCkgPT4gbG9nZ2VyLnByb2dyZXNzKGFueSgpKSkudGhlblJldHVybihfTW9ja1Byb2dyZXNzKCkpOwogICAgfSk7CgogICAgdGVzdCgncnVuIGNvbXBsZXRlcycsICgpIHsKICAgICAgZXhwZWN0KAogICAgICAgIEV4aXRPdmVycmlkZXMucnVuWm9uZWQoCiAgICAgICAgICAoKSA9PiBwcmVfZ2VuLnJ1bihfRmFrZUhvb2tDb250ZXh0KGxvZ2dlcjogbG9nZ2VyKSksCiAgICAgICAgICBleGl0OiAoXykge30sCiAgICAgICAgKSwKICAgICAgICBjb21wbGV0ZXMsCiAgICAgICk7CiAgICB9KTsKCiAgICB0ZXN0KCdleGl0KDEpIGlmIGJ1aWxkUm91dGVDb25maWd1cmF0aW9uIHRocm93cycsICgpIGFzeW5jIHsKICAgICAgZmluYWwgZXhpdENhbGxzID0gPGludD5bXTsKICAgICAgZmluYWwgZXhjZXB0aW9uID0gRXhjZXB0aW9uKCdvb3BzJyk7CiAgICAgIGF3YWl0IHByZV9nZW4ucHJlR2VuKAogICAgICAgIGNvbnRleHQsCiAgICAgICAgYnVpbGRDb25maWd1cmF0aW9uOiAoXykgPT4gdGhyb3cgZXhjZXB0aW9uLAogICAgICAgIGV4aXQ6IGV4aXRDYWxscy5hZGQsCiAgICAgICAgcnVuUHJvY2Vzczogc3VjY2Vzc1J1blByb2Nlc3MsCiAgICAgICk7CiAgICAgIGV4cGVjdChleGl0Q2FsbHMsIGVxdWFscyhbMV0pKTsKICAgICAgdmVyaWZ5KCgpID0+IGxvZ2dlci5lcnIoZXhjZXB0aW9uLnRvU3RyaW5nKCkpKS5jYWxsZWQoMSk7CiAgICB9KTsKCiAgICB0ZXN0KCdleGl0KDEpIGZvciByb3V0ZSBjb25mbGljdHMnLCAoKSBhc3luYyB7CiAgICAgIGNvbnN0IGNvbmZpZ3VyYXRpb24gPSBSb3V0ZUNvbmZpZ3VyYXRpb24oCiAgICAgICAgbWlkZGxld2FyZTogW10sCiAgICAgICAgZGlyZWN0b3JpZXM6IFtdLAogICAgICAgIHJvdXRlczogW10sCiAgICAgICAgcm9ndWVSb3V0ZXM6IFtdLAogICAgICAgIGVuZHBvaW50czogewogICAgICAgICAgJy8nOiBbCiAgICAgICAgICAgIFJvdXRlRmlsZSgKICAgICAgICAgICAgICBuYW1lOiAnaW5kZXgnLAogICAgICAgICAgICAgIHBhdGg6ICdpbmRleC5kYXJ0JywKICAgICAgICAgICAgICByb3V0ZTogJy8nLAogICAgICAgICAgICAgIHBhcmFtczogW10sCiAgICAgICAgICAgICAgd2lsZGNhcmQ6IGZhbHNlLAogICAgICAgICAgICApLAogICAgICAgICAgXSwKICAgICAgICAgICcvaGVsbG8nOiBbCiAgICAgICAgICAgIFJvdXRlRmlsZSgKICAgICAgICAgICAgICBuYW1lOiAnaGVsbG8nLAogICAgICAgICAgICAgIHBhdGg6ICdoZWxsby5kYXJ0JywKICAgICAgICAgICAgICByb3V0ZTogJy9oZWxsbycsCiAgICAgICAgICAgICAgcGFyYW1zOiBbXSwKICAgICAgICAgICAgICB3aWxkY2FyZDogZmFsc2UsCiAgICAgICAgICAgICksCiAgICAgICAgICAgIFJvdXRlRmlsZSgKICAgICAgICAgICAgICBuYW1lOiAnaGVsbG9faW5kZXgnLAogICAgICAgICAgICAgIHBhdGg6ICdoZWxsby9pbmRleC5kYXJ0JywKICAgICAgICAgICAgICByb3V0ZTogJy8nLAogICAgICAgICAgICAgIHBhcmFtczogW10sCiAgICAgICAgICAgICAgd2lsZGNhcmQ6IGZhbHNlLAogICAgICAgICAgICApLAogICAgICAgICAgXSwKICAgICAgICB9LAogICAgICApOwoKICAgICAgZmluYWwgZXhpdENhbGxzID0gPGludD5bXTsKICAgICAgYXdhaXQgcHJlX2dlbi5wcmVHZW4oCiAgICAgICAgY29udGV4dCwKICAgICAgICBidWlsZENvbmZpZ3VyYXRpb246IChfKSA9PiBjb25maWd1cmF0aW9uLAogICAgICAgIGV4aXQ6IGV4aXRDYWxscy5hZGQsCiAgICAgICAgcnVuUHJvY2Vzczogc3VjY2Vzc1J1blByb2Nlc3MsCiAgICAgICk7CgogICAgICB2ZXJpZnkoCiAgICAgICAgKCkgPT4gbG9nZ2VyLmVycigKICAgICAgICAgICcnJ1JvdXRlIGNvbmZsaWN0IGRldGVjdGVkLiAke2xpZ2h0Q3lhbi53cmFwKCdyb3V0ZXMvaGVsbG8uZGFydCcpfSBhbmQgJHtsaWdodEN5YW4ud3JhcCgncm91dGVzL2hlbGxvL2luZGV4LmRhcnQnKX0gYm90aCByZXNvbHZlIHRvICR7bGlnaHRDeWFuLndyYXAoJy9oZWxsbycpfS4nJycsCiAgICAgICAgKSwKICAgICAgKTsKICAgICAgZXhwZWN0KGV4aXRDYWxscywgZXF1YWxzKFsxXSkpOwogICAgfSk7CgogICAgdGVzdCgnZXhpdCgxKSBmb3Igcm9ndWUgcm91dGVzJywgKCkgYXN5bmMgewogICAgICBjb25zdCBjb25maWd1cmF0aW9uID0gUm91dGVDb25maWd1cmF0aW9uKAogICAgICAgIG1pZGRsZXdhcmU6IFtdLAogICAgICAgIGRpcmVjdG9yaWVzOiBbXSwKICAgICAgICByb3V0ZXM6IFtdLAogICAgICAgIHJvZ3VlUm91dGVzOiBbCiAgICAgICAgICBSb3V0ZUZpbGUoCiAgICAgICAgICAgIG5hbWU6ICdoZWxsbycsCiAgICAgICAgICAgIHBhdGg6ICdoZWxsby5kYXJ0JywKICAgICAgICAgICAgcm91dGU6ICcvaGVsbG8nLAogICAgICAgICAgICBwYXJhbXM6IFtdLAogICAgICAgICAgICB3aWxkY2FyZDogZmFsc2UsCiAgICAgICAgICApLAogICAgICAgIF0sCiAgICAgICAgZW5kcG9pbnRzOiB7fSwKICAgICAgICBpbnZva2VDdXN0b21FbnRyeXBvaW50OiB0cnVlLAogICAgICApOwoKICAgICAgZmluYWwgZXhpdENhbGxzID0gPGludD5bXTsKICAgICAgYXdhaXQgcHJlX2dlbi5wcmVHZW4oCiAgICAgICAgY29udGV4dCwKICAgICAgICBidWlsZENvbmZpZ3VyYXRpb246IChfKSA9PiBjb25maWd1cmF0aW9uLAogICAgICAgIGV4aXQ6IGV4aXRDYWxscy5hZGQsCiAgICAgICAgcnVuUHJvY2Vzczogc3VjY2Vzc1J1blByb2Nlc3MsCiAgICAgICk7CgogICAgICB2ZXJpZnkoCiAgICAgICAgKCkgPT4gbG9nZ2VyLmVycigKICAgICAgICAgICcnJ1JvZ3VlIHJvdXRlIGRldGVjdGVkLiR7ZGVmYXVsdEZvcmVncm91bmQud3JhcCgnICcpfVJlbmFtZSAke2xpZ2h0Q3lhbi53cmFwKCdyb3V0ZXMvaGVsbG8uZGFydCcpfSB0byAke2xpZ2h0Q3lhbi53cmFwKCdyb3V0ZXMvaGVsbG8vaW5kZXguZGFydCcpfS4nJycsCiAgICAgICAgKSwKICAgICAgKTsKICAgICAgZXhwZWN0KGV4aXRDYWxscywgZXF1YWxzKFsxXSkpOwogICAgfSk7CgogICAgdGVzdCgKICAgICAgJ3dvcmtzIHdpdGggZXh0ZXJuYWwgZGVwZW5kZW5jaWVzJywKICAgICAgKCkgYXN5bmMgewogICAgICAgIGNvbnN0IGNvbmZpZ3VyYXRpb24gPSBSb3V0ZUNvbmZpZ3VyYXRpb24oCiAgICAgICAgICBtaWRkbGV3YXJlOiBbXSwKICAgICAgICAgIGRpcmVjdG9yaWVzOiBbXSwKICAgICAgICAgIHJvdXRlczogW10sCiAgICAgICAgICByb2d1ZVJvdXRlczogW10sCiAgICAgICAgICBlbmRwb2ludHM6IHt9LAogICAgICAgICk7CgogICAgICAgIGZpbmFsIGRpcmVjdG9yeSA9IERpcmVjdG9yeS5zeXN0ZW1UZW1wLmNyZWF0ZVRlbXBTeW5jKCk7CiAgICAgICAgRmlsZShwYXRoLmpvaW4oZGlyZWN0b3J5LnBhdGgsICdwdWJzcGVjLnlhbWwnKSkud3JpdGVBc1N0cmluZ1N5bmMoCiAgICAgICAgICAnJycKbmFtZTogZXhhbXBsZQp2ZXJzaW9uOiAwLjEuMAplbnZpcm9ubWVudDoKICBzZGs6IF4yLjE3LjAKZGVwZW5kZW5jaWVzOgogIG1hc29uOiBhbnkKICBmb286CiAgICBwYXRoOiAuLi8uLi9mb28KZGV2X2RlcGVuZGVuY2llczoKICB0ZXN0OiBhbnkKJycnLAogICAgICAgICk7CiAgICAgICAgRmlsZShwYXRoLmpvaW4oZGlyZWN0b3J5LnBhdGgsICdwdWJzcGVjLmxvY2snKSkud3JpdGVBc1N0cmluZ1N5bmMoCiAgICAgICAgICBmb29QYXRoLAogICAgICAgICk7CiAgICAgICAgZmluYWwgZXhpdENhbGxzID0gPGludD5bXTsKICAgICAgICBhd2FpdCBwcmVfZ2VuLnByZUdlbigKICAgICAgICAgIGNvbnRleHQsCiAgICAgICAgICBidWlsZENvbmZpZ3VyYXRpb246IChfKSA9PiBjb25maWd1cmF0aW9uLAogICAgICAgICAgZXhpdDogZXhpdENhbGxzLmFkZCwKICAgICAgICAgIGRpcmVjdG9yeTogZGlyZWN0b3J5LAogICAgICAgICAgcnVuUHJvY2Vzczogc3VjY2Vzc1J1blByb2Nlc3MsCiAgICAgICAgICBjb3B5UGF0aDogKF8sIF9fKSBhc3luYyB7fSwKICAgICAgICApOwoKICAgICAgICBleHBlY3QoZXhpdENhbGxzLCBpc0VtcHR5KTsKICAgICAgICBkaXJlY3RvcnkuZGVsZXRlKHJlY3Vyc2l2ZTogdHJ1ZSkuaWdub3JlKCk7CiAgICAgIH0sCiAgICApOwoKICAgIHRlc3QoJ3JldGFpbnMgaW52b2tlQ3VzdG9tRW50cnlwb2ludCAodHJ1ZSknLCAoKSBhc3luYyB7CiAgICAgIGNvbnN0IGNvbmZpZ3VyYXRpb24gPSBSb3V0ZUNvbmZpZ3VyYXRpb24oCiAgICAgICAgbWlkZGxld2FyZTogW10sCiAgICAgICAgZGlyZWN0b3JpZXM6IFtdLAogICAgICAgIHJvdXRlczogW10sCiAgICAgICAgcm9ndWVSb3V0ZXM6IFtdLAogICAgICAgIGVuZHBvaW50czoge30sCiAgICAgICAgaW52b2tlQ3VzdG9tRW50cnlwb2ludDogdHJ1ZSwKICAgICAgKTsKICAgICAgZmluYWwgZXhpdENhbGxzID0gPGludD5bXTsKICAgICAgYXdhaXQgcHJlX2dlbi5wcmVHZW4oCiAgICAgICAgY29udGV4dCwKICAgICAgICBidWlsZENvbmZpZ3VyYXRpb246IChfKSA9PiBjb25maWd1cmF0aW9uLAogICAgICAgIGV4aXQ6IGV4aXRDYWxscy5hZGQsCiAgICAgICAgcnVuUHJvY2Vzczogc3VjY2Vzc1J1blByb2Nlc3MsCiAgICAgICk7CiAgICAgIGV4cGVjdChleGl0Q2FsbHMsIGlzRW1wdHkpOwogICAgICB2ZXJpZnlOZXZlcigoKSA9PiBsb2dnZXIuZXJyKGFueSgpKSk7CiAgICAgIGV4cGVjdCgKICAgICAgICBjb250ZXh0LnZhcnMsCiAgICAgICAgZXF1YWxzKHsKICAgICAgICAgICdkaXJlY3Rvcmllcyc6IDxSb3V0ZURpcmVjdG9yeT5bXSwKICAgICAgICAgICdyb3V0ZXMnOiA8Um91dGVGaWxlPltdLAogICAgICAgICAgJ21pZGRsZXdhcmUnOiA8TWlkZGxld2FyZUZpbGU+W10sCiAgICAgICAgICAnZ2xvYmFsTWlkZGxld2FyZSc6IGZhbHNlLAogICAgICAgICAgJ3NlcnZlU3RhdGljRmlsZXMnOiBmYWxzZSwKICAgICAgICAgICdpbnZva2VDdXN0b21FbnRyeXBvaW50JzogdHJ1ZSwKICAgICAgICAgICdpbnZva2VDdXN0b21Jbml0JzogZmFsc2UsCiAgICAgICAgICAncGF0aERlcGVuZGVuY2llcyc6IDxTdHJpbmc+W10sCiAgICAgICAgICAnaGFzRXh0ZXJuYWxEZXBlbmRlbmNpZXMnOiBmYWxzZSwKICAgICAgICAgICdkYXJ0VmVyc2lvbic6ICdzdGFibGUnLAogICAgICAgICAgJ2FkZERvY2tlcmZpbGUnOiB0cnVlLAogICAgICAgIH0pLAogICAgICApOwogICAgfSk7CgogICAgdGVzdCgiZG9uJ3QgY3JlYXRlIHRoZSBkb2NrZXJmaWxlIGlmIG9uZSBhbHJlYWR5IGV4aXN0cyBvbiB0aGUgZm9sZGVyLiIsCiAgICAgICAgKCkgYXN5bmMgewogICAgICBjb25zdCBjb25maWd1cmF0aW9uID0gUm91dGVDb25maWd1cmF0aW9uKAogICAgICAgIG1pZGRsZXdhcmU6IFtdLAogICAgICAgIGRpcmVjdG9yaWVzOiBbXSwKICAgICAgICByb3V0ZXM6IFtdLAogICAgICAgIHJvZ3VlUm91dGVzOiBbXSwKICAgICAgICBlbmRwb2ludHM6IHt9LAogICAgICApOwoKICAgICAgZmluYWwgZGlyZWN0b3J5ID0gRGlyZWN0b3J5LnN5c3RlbVRlbXAuY3JlYXRlVGVtcFN5bmMoKTsKICAgICAgRmlsZShwYXRoLmpvaW4oZGlyZWN0b3J5LnBhdGgsICdwdWJzcGVjLnlhbWwnKSkud3JpdGVBc1N0cmluZ1N5bmMoCiAgICAgICAgJycnCm5hbWU6IGV4YW1wbGUKdmVyc2lvbjogMC4xLjAKZW52aXJvbm1lbnQ6CiAgc2RrOiBeMi4xNy4wCmRlcGVuZGVuY2llczoKICBtYXNvbjogYW55CiAgdGVzdDogYW55CicnJywKICAgICAgKTsKCiAgICAgIEZpbGUocGF0aC5qb2luKGRpcmVjdG9yeS5wYXRoLCAncHVic3BlYy5sb2NrJykpLndyaXRlQXNTdHJpbmdTeW5jKAogICAgICAgIG5vUGF0aERlcGVuZGVuY2llcywKICAgICAgKTsKICAgICAgRmlsZShwYXRoLmpvaW4oZGlyZWN0b3J5LnBhdGgsICdEb2NrZXJmaWxlJykpLndyaXRlQXNTdHJpbmdTeW5jKAogICAgICAgICcnLAogICAgICApOwoKICAgICAgZmluYWwgZXhpdENhbGxzID0gPGludD5bXTsKICAgICAgYXdhaXQgcHJlX2dlbi5wcmVHZW4oCiAgICAgICAgY29udGV4dCwKICAgICAgICBidWlsZENvbmZpZ3VyYXRpb246IChfKSA9PiBjb25maWd1cmF0aW9uLAogICAgICAgIGV4aXQ6IGV4aXRDYWxscy5hZGQsCiAgICAgICAgZGlyZWN0b3J5OiBkaXJlY3RvcnksCiAgICAgICAgcnVuUHJvY2Vzczogc3VjY2Vzc1J1blByb2Nlc3MsCiAgICAgICk7CgogICAgICBleHBlY3QoCiAgICAgICAgY29udGV4dC52YXJzLAogICAgICAgIGVxdWFscyh7CiAgICAgICAgICAnZGlyZWN0b3JpZXMnOiA8Um91dGVEaXJlY3Rvcnk+W10sCiAgICAgICAgICAncm91dGVzJzogPFJvdXRlRmlsZT5bXSwKICAgICAgICAgICdtaWRkbGV3YXJlJzogPE1pZGRsZXdhcmVGaWxlPltdLAogICAgICAgICAgJ2dsb2JhbE1pZGRsZXdhcmUnOiBmYWxzZSwKICAgICAgICAgICdzZXJ2ZVN0YXRpY0ZpbGVzJzogZmFsc2UsCiAgICAgICAgICAnaW52b2tlQ3VzdG9tRW50cnlwb2ludCc6IGZhbHNlLAogICAgICAgICAgJ2ludm9rZUN1c3RvbUluaXQnOiBmYWxzZSwKICAgICAgICAgICdoYXNFeHRlcm5hbERlcGVuZGVuY2llcyc6IGZhbHNlLAogICAgICAgICAgJ3BhdGhEZXBlbmRlbmNpZXMnOiA8U3RyaW5nPltdLAogICAgICAgICAgJ2RhcnRWZXJzaW9uJzogJ3N0YWJsZScsCiAgICAgICAgICAnYWRkRG9ja2VyZmlsZSc6IGZhbHNlLAogICAgICAgIH0pLAogICAgICApOwogICAgICBkaXJlY3RvcnkuZGVsZXRlKHJlY3Vyc2l2ZTogdHJ1ZSkuaWdub3JlKCk7CiAgICB9KTsKCiAgICB0ZXN0KCdyZXRhaW5zIGludm9rZUN1c3RvbUluaXQgKHRydWUpJywgKCkgYXN5bmMgewogICAgICBjb25zdCBjb25maWd1cmF0aW9uID0gUm91dGVDb25maWd1cmF0aW9uKAogICAgICAgIG1pZGRsZXdhcmU6IFtdLAogICAgICAgIGRpcmVjdG9yaWVzOiBbXSwKICAgICAgICByb3V0ZXM6IFtdLAogICAgICAgIHJvZ3VlUm91dGVzOiBbXSwKICAgICAgICBlbmRwb2ludHM6IHt9LAogICAgICAgIGludm9rZUN1c3RvbUluaXQ6IHRydWUsCiAgICAgICk7CiAgICAgIGZpbmFsIGV4aXRDYWxscyA9IDxpbnQ+W107CiAgICAgIGF3YWl0IHByZV9nZW4ucHJlR2VuKAogICAgICAgIGNvbnRleHQsCiAgICAgICAgYnVpbGRDb25maWd1cmF0aW9uOiAoXykgPT4gY29uZmlndXJhdGlvbiwKICAgICAgICBleGl0OiBleGl0Q2FsbHMuYWRkLAogICAgICAgIHJ1blByb2Nlc3M6IHN1Y2Nlc3NSdW5Qcm9jZXNzLAogICAgICApOwogICAgICBleHBlY3QoZXhpdENhbGxzLCBpc0VtcHR5KTsKICAgICAgdmVyaWZ5TmV2ZXIoKCkgPT4gbG9nZ2VyLmVycihhbnkoKSkpOwogICAgICBleHBlY3QoCiAgICAgICAgY29udGV4dC52YXJzLAogICAgICAgIGVxdWFscyh7CiAgICAgICAgICAnZGlyZWN0b3JpZXMnOiA8Um91dGVEaXJlY3Rvcnk+W10sCiAgICAgICAgICAncm91dGVzJzogPFJvdXRlRmlsZT5bXSwKICAgICAgICAgICdtaWRkbGV3YXJlJzogPE1pZGRsZXdhcmVGaWxlPltdLAogICAgICAgICAgJ2dsb2JhbE1pZGRsZXdhcmUnOiBmYWxzZSwKICAgICAgICAgICdzZXJ2ZVN0YXRpY0ZpbGVzJzogZmFsc2UsCiAgICAgICAgICAnaW52b2tlQ3VzdG9tRW50cnlwb2ludCc6IGZhbHNlLAogICAgICAgICAgJ2ludm9rZUN1c3RvbUluaXQnOiB0cnVlLAogICAgICAgICAgJ2hhc0V4dGVybmFsRGVwZW5kZW5jaWVzJzogZmFsc2UsCiAgICAgICAgICAncGF0aERlcGVuZGVuY2llcyc6IDxTdHJpbmc+W10sCiAgICAgICAgICAnZGFydFZlcnNpb24nOiAnc3RhYmxlJywKICAgICAgICAgICdhZGREb2NrZXJmaWxlJzogdHJ1ZSwKICAgICAgICB9KSwKICAgICAgKTsKICAgIH0pOwoKICAgIHRlc3QoCiAgICAgICd1cGRhdGVzIGNvbnRleHQudmFycyB3aGVuIGJ1aWxkUm91dGVDb25maWd1cmF0aW9uIHN1Y2NlZWRzJywKICAgICAgKCkgYXN5bmMgewogICAgICAgIGNvbnN0IGNvbmZpZ3VyYXRpb24gPSBSb3V0ZUNvbmZpZ3VyYXRpb24oCiAgICAgICAgICBnbG9iYWxNaWRkbGV3YXJlOiBNaWRkbGV3YXJlRmlsZSgKICAgICAgICAgICAgbmFtZTogJ21pZGRsZXdhcmUnLAogICAgICAgICAgICBwYXRoOiAnbWlkZGxld2FyZS5kYXJ0JywKICAgICAgICAgICksCiAgICAgICAgICBtaWRkbGV3YXJlOiBbCiAgICAgICAgICAgIE1pZGRsZXdhcmVGaWxlKAogICAgICAgICAgICAgIG5hbWU6ICdoZWxsb19taWRkbGV3YXJlJywKICAgICAgICAgICAgICBwYXRoOiAnaGVsbG8vbWlkZGxld2FyZS5kYXJ0JywKICAgICAgICAgICAgKSwKICAgICAgICAgIF0sCiAgICAgICAgICBkaXJlY3RvcmllczogWwogICAgICAgICAgICBSb3V0ZURpcmVjdG9yeSgKICAgICAgICAgICAgICBuYW1lOiAnXycsCiAgICAgICAgICAgICAgcm91dGU6ICcvJywKICAgICAgICAgICAgICBtaWRkbGV3YXJlOiBbXSwKICAgICAgICAgICAgICBmaWxlczogWwogICAgICAgICAgICAgICAgUm91dGVGaWxlKAogICAgICAgICAgICAgICAgICBuYW1lOiAnaW5kZXgnLAogICAgICAgICAgICAgICAgICBwYXRoOiAnaW5kZXguZGFydCcsCiAgICAgICAgICAgICAgICAgIHJvdXRlOiAnLycsCiAgICAgICAgICAgICAgICAgIHBhcmFtczogW10sCiAgICAgICAgICAgICAgICAgIHdpbGRjYXJkOiBmYWxzZSwKICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICBSb3V0ZUZpbGUoCiAgICAgICAgICAgICAgICAgIG5hbWU6ICdoZWxsbycsCiAgICAgICAgICAgICAgICAgIHBhdGg6ICdoZWxsby5kYXJ0JywKICAgICAgICAgICAgICAgICAgcm91dGU6ICcvaGVsbG8nLAogICAgICAgICAgICAgICAgICBwYXJhbXM6IFtdLAogICAgICAgICAgICAgICAgICB3aWxkY2FyZDogZmFsc2UsCiAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgcGFyYW1zOiBbXSwKICAgICAgICAgICAgKSwKICAgICAgICAgIF0sCiAgICAgICAgICByb3V0ZXM6IFsKICAgICAgICAgICAgUm91dGVGaWxlKAogICAgICAgICAgICAgIG5hbWU6ICdpbmRleCcsCiAgICAgICAgICAgICAgcGF0aDogJ2luZGV4LmRhcnQnLAogICAgICAgICAgICAgIHJvdXRlOiAnLycsCiAgICAgICAgICAgICAgcGFyYW1zOiBbXSwKICAgICAgICAgICAgICB3aWxkY2FyZDogZmFsc2UsCiAgICAgICAgICAgICksCiAgICAgICAgICAgIFJvdXRlRmlsZSgKICAgICAgICAgICAgICBuYW1lOiAnaGVsbG8nLAogICAgICAgICAgICAgIHBhdGg6ICdoZWxsby5kYXJ0JywKICAgICAgICAgICAgICByb3V0ZTogJy9oZWxsbycsCiAgICAgICAgICAgICAgcGFyYW1zOiBbXSwKICAgICAgICAgICAgICB3aWxkY2FyZDogZmFsc2UsCiAgICAgICAgICAgICksCiAgICAgICAgICBdLAogICAgICAgICAgcm9ndWVSb3V0ZXM6IFtdLAogICAgICAgICAgZW5kcG9pbnRzOiB7CiAgICAgICAgICAgICcvJzogWwogICAgICAgICAgICAgIFJvdXRlRmlsZSgKICAgICAgICAgICAgICAgIG5hbWU6ICdpbmRleCcsCiAgICAgICAgICAgICAgICBwYXRoOiAnaW5kZXguZGFydCcsCiAgICAgICAgICAgICAgICByb3V0ZTogJy8nLAogICAgICAgICAgICAgICAgcGFyYW1zOiBbXSwKICAgICAgICAgICAgICAgIHdpbGRjYXJkOiBmYWxzZSwKICAgICAgICAgICAgICApLAogICAgICAgICAgICBdLAogICAgICAgICAgICAnL2hlbGxvJzogWwogICAgICAgICAgICAgIFJvdXRlRmlsZSgKICAgICAgICAgICAgICAgIG5hbWU6ICdoZWxsbycsCiAgICAgICAgICAgICAgICBwYXRoOiAnaGVsbG8uZGFydCcsCiAgICAgICAgICAgICAgICByb3V0ZTogJy9oZWxsbycsCiAgICAgICAgICAgICAgICBwYXJhbXM6IFtdLAogICAgICAgICAgICAgICAgd2lsZGNhcmQ6IGZhbHNlLAogICAgICAgICAgICAgICksCiAgICAgICAgICAgIF0sCiAgICAgICAgICB9LAogICAgICAgICAgc2VydmVTdGF0aWNGaWxlczogdHJ1ZSwKICAgICAgICApOwogICAgICAgIGZpbmFsIGV4aXRDYWxscyA9IDxpbnQ+W107CiAgICAgICAgYXdhaXQgcHJlX2dlbi5wcmVHZW4oCiAgICAgICAgICBjb250ZXh0LAogICAgICAgICAgYnVpbGRDb25maWd1cmF0aW9uOiAoXykgPT4gY29uZmlndXJhdGlvbiwKICAgICAgICAgIGV4aXQ6IGV4aXRDYWxscy5hZGQsCiAgICAgICAgICBydW5Qcm9jZXNzOiBzdWNjZXNzUnVuUHJvY2VzcywKICAgICAgICApOwogICAgICAgIGV4cGVjdChleGl0Q2FsbHMsIGlzRW1wdHkpOwogICAgICAgIHZlcmlmeU5ldmVyKCgpID0+IGxvZ2dlci5lcnIoYW55KCkpKTsKICAgICAgICBleHBlY3QoCiAgICAgICAgICBjb250ZXh0LnZhcnMsCiAgICAgICAgICBlcXVhbHMoewogICAgICAgICAgICAnZGlyZWN0b3JpZXMnOiBbCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJ25hbWUnOiAnXycsCiAgICAgICAgICAgICAgICAncm91dGUnOiAnLycsCiAgICAgICAgICAgICAgICAnbWlkZGxld2FyZSc6IDxNYXA8U3RyaW5nLCBkeW5hbWljPj5bXSwKICAgICAgICAgICAgICAgICdmaWxlcyc6IFsKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICduYW1lJzogJ2luZGV4JywKICAgICAgICAgICAgICAgICAgICAncGF0aCc6ICdpbmRleC5kYXJ0JywKICAgICAgICAgICAgICAgICAgICAncm91dGUnOiAnLycsCiAgICAgICAgICAgICAgICAgICAgJ2ZpbGVfcGFyYW1zJzogY29uc3QgPFN0cmluZz5bXSwKICAgICAgICAgICAgICAgICAgICAnd2lsZGNhcmQnOiBmYWxzZSwKICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICduYW1lJzogJ2hlbGxvJywKICAgICAgICAgICAgICAgICAgICAncGF0aCc6ICdoZWxsby5kYXJ0JywKICAgICAgICAgICAgICAgICAgICAncm91dGUnOiAnL2hlbGxvJywKICAgICAgICAgICAgICAgICAgICAnZmlsZV9wYXJhbXMnOiBjb25zdCA8U3RyaW5nPltdLAogICAgICAgICAgICAgICAgICAgICd3aWxkY2FyZCc6IGZhbHNlLAogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgJ2RpcmVjdG9yeV9wYXJhbXMnOiBjb25zdCA8U3RyaW5nPltdLAogICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgJ3JvdXRlcyc6IFsKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAnbmFtZSc6ICdpbmRleCcsCiAgICAgICAgICAgICAgICAncGF0aCc6ICdpbmRleC5kYXJ0JywKICAgICAgICAgICAgICAgICdyb3V0ZSc6ICcvJywKICAgICAgICAgICAgICAgICdmaWxlX3BhcmFtcyc6IGNvbnN0IDxTdHJpbmc+W10sCiAgICAgICAgICAgICAgICAnd2lsZGNhcmQnOiBmYWxzZSwKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICduYW1lJzogJ2hlbGxvJywKICAgICAgICAgICAgICAgICdwYXRoJzogJ2hlbGxvLmRhcnQnLAogICAgICAgICAgICAgICAgJ3JvdXRlJzogJy9oZWxsbycsCiAgICAgICAgICAgICAgICAnZmlsZV9wYXJhbXMnOiBjb25zdCA8U3RyaW5nPltdLAogICAgICAgICAgICAgICAgJ3dpbGRjYXJkJzogZmFsc2UsCiAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAnbWlkZGxld2FyZSc6IFsKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAnbmFtZSc6ICdoZWxsb19taWRkbGV3YXJlJywKICAgICAgICAgICAgICAgICdwYXRoJzogJ2hlbGxvL21pZGRsZXdhcmUuZGFydCcsCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgJ2dsb2JhbE1pZGRsZXdhcmUnOiB7CiAgICAgICAgICAgICAgJ25hbWUnOiAnbWlkZGxld2FyZScsCiAgICAgICAgICAgICAgJ3BhdGgnOiAnbWlkZGxld2FyZS5kYXJ0JywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgJ3NlcnZlU3RhdGljRmlsZXMnOiB0cnVlLAogICAgICAgICAgICAnaW52b2tlQ3VzdG9tRW50cnlwb2ludCc6IGZhbHNlLAogICAgICAgICAgICAnaW52b2tlQ3VzdG9tSW5pdCc6IGZhbHNlLAogICAgICAgICAgICAnaGFzRXh0ZXJuYWxEZXBlbmRlbmNpZXMnOiBmYWxzZSwKICAgICAgICAgICAgJ3BhdGhEZXBlbmRlbmNpZXMnOiA8U3RyaW5nPltdLAogICAgICAgICAgICAnZGFydFZlcnNpb24nOiAnc3RhYmxlJywKICAgICAgICAgICAgJ2FkZERvY2tlcmZpbGUnOiB0cnVlLAogICAgICAgICAgfSksCiAgICAgICAgKTsKICAgICAgfSwKICAgICk7CiAgfSk7Cn0K", + "aW1wb3J0ICdkYXJ0OmlvJzsKCmltcG9ydCAncGFja2FnZTpkYXJ0X2Zyb2dfZ2VuL2RhcnRfZnJvZ19nZW4uZGFydCc7CmltcG9ydCAncGFja2FnZTpkYXJ0X2Zyb2dfcHJvZF9zZXJ2ZXJfaG9va3MvZGFydF9mcm9nX3Byb2Rfc2VydmVyX2hvb2tzLmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6bWFzb24vbWFzb24uZGFydCcKICAgIHNob3cgSG9va0NvbnRleHQsIExvZ2dlciwgUHJvZ3Jlc3MsIGRlZmF1bHRGb3JlZ3JvdW5kLCBsaWdodEN5YW47CmltcG9ydCAncGFja2FnZTptb2NrdGFpbC9tb2NrdGFpbC5kYXJ0JzsKaW1wb3J0ICdwYWNrYWdlOnBhdGgvcGF0aC5kYXJ0JyBhcyBwYXRoOwppbXBvcnQgJ3BhY2thZ2U6dGVzdC90ZXN0LmRhcnQnOwoKaW1wb3J0ICcuLi9wcmVfZ2VuLmRhcnQnIGFzIHByZV9nZW47CmltcG9ydCAncHVic3BlY3MuZGFydCc7CgpjbGFzcyBfRmFrZUhvb2tDb250ZXh0IGV4dGVuZHMgRmFrZSBpbXBsZW1lbnRzIEhvb2tDb250ZXh0IHsKICBfRmFrZUhvb2tDb250ZXh0KHtMb2dnZXI/IGxvZ2dlcn0pIDogX2xvZ2dlciA9IGxvZ2dlciA/PyBfTW9ja0xvZ2dlcigpOwoKICBmaW5hbCBMb2dnZXIgX2xvZ2dlcjsKCiAgdmFyIF92YXJzID0gPFN0cmluZywgZHluYW1pYz57fTsKCiAgQG92ZXJyaWRlCiAgTWFwPFN0cmluZywgZHluYW1pYz4gZ2V0IHZhcnMgPT4gX3ZhcnM7CgogIEBvdmVycmlkZQogIHNldCB2YXJzKE1hcDxTdHJpbmcsIGR5bmFtaWM+IHZhbHVlKSA9PiBfdmFycyA9IHZhbHVlOwoKICBAb3ZlcnJpZGUKICBMb2dnZXIgZ2V0IGxvZ2dlciA9PiBfbG9nZ2VyOwp9CgpjbGFzcyBfTW9ja0xvZ2dlciBleHRlbmRzIE1vY2sgaW1wbGVtZW50cyBMb2dnZXIge30KCmNsYXNzIF9Nb2NrUHJvZ3Jlc3MgZXh0ZW5kcyBNb2NrIGltcGxlbWVudHMgUHJvZ3Jlc3Mge30KCnZvaWQgbWFpbigpIHsKICBncm91cCgncHJlR2VuJywgKCkgewogICAgbGF0ZSBIb29rQ29udGV4dCBjb250ZXh0OwogICAgbGF0ZSBMb2dnZXIgbG9nZ2VyOwoKICAgIEZ1dHVyZTxQcm9jZXNzUmVzdWx0PiBzdWNjZXNzUnVuUHJvY2VzcygKICAgICAgZXhlY3V0YWJsZSwKICAgICAgYXJncywgewogICAgICBTdHJpbmc/IHdvcmtpbmdEaXJlY3RvcnksCiAgICAgIGJvb2w/IHJ1bkluU2hlbGwsCiAgICB9KSA9PgogICAgICAgIEZ1dHVyZS52YWx1ZShQcm9jZXNzUmVzdWx0KDAsIDAsICcnLCAnJykpOwoKICAgIHNldFVwKCgpIHsKICAgICAgbG9nZ2VyID0gX01vY2tMb2dnZXIoKTsKICAgICAgY29udGV4dCA9IF9GYWtlSG9va0NvbnRleHQobG9nZ2VyOiBsb2dnZXIpCiAgICAgICAgLi52YXJzWydkYXJ0VmVyc2lvbiddID0gJ3N0YWJsZSc7CgogICAgICB3aGVuKCgpID0+IGxvZ2dlci5wcm9ncmVzcyhhbnkoKSkpLnRoZW5SZXR1cm4oX01vY2tQcm9ncmVzcygpKTsKICAgIH0pOwoKICAgIHRlc3QoJ3J1biBjb21wbGV0ZXMnLCAoKSB7CiAgICAgIGV4cGVjdCgKICAgICAgICBFeGl0T3ZlcnJpZGVzLnJ1blpvbmVkKAogICAgICAgICAgKCkgPT4gcHJlX2dlbi5ydW4oX0Zha2VIb29rQ29udGV4dChsb2dnZXI6IGxvZ2dlcikpLAogICAgICAgICAgZXhpdDogKF8pIHt9LAogICAgICAgICksCiAgICAgICAgY29tcGxldGVzLAogICAgICApOwogICAgfSk7CgogICAgdGVzdCgnZXhpdCgxKSBpZiBidWlsZFJvdXRlQ29uZmlndXJhdGlvbiB0aHJvd3MnLCAoKSBhc3luYyB7CiAgICAgIGZpbmFsIGV4aXRDYWxscyA9IDxpbnQ+W107CiAgICAgIGZpbmFsIGV4Y2VwdGlvbiA9IEV4Y2VwdGlvbignb29wcycpOwogICAgICBhd2FpdCBwcmVfZ2VuLnByZUdlbigKICAgICAgICBjb250ZXh0LAogICAgICAgIGJ1aWxkQ29uZmlndXJhdGlvbjogKF8pID0+IHRocm93IGV4Y2VwdGlvbiwKICAgICAgICBleGl0OiBleGl0Q2FsbHMuYWRkLAogICAgICAgIHJ1blByb2Nlc3M6IHN1Y2Nlc3NSdW5Qcm9jZXNzLAogICAgICApOwogICAgICBleHBlY3QoZXhpdENhbGxzLCBlcXVhbHMoWzFdKSk7CiAgICAgIHZlcmlmeSgoKSA9PiBsb2dnZXIuZXJyKGV4Y2VwdGlvbi50b1N0cmluZygpKSkuY2FsbGVkKDEpOwogICAgfSk7CgogICAgdGVzdCgnZXhpdCgxKSBmb3Igcm91dGUgY29uZmxpY3RzJywgKCkgYXN5bmMgewogICAgICBjb25zdCBjb25maWd1cmF0aW9uID0gUm91dGVDb25maWd1cmF0aW9uKAogICAgICAgIG1pZGRsZXdhcmU6IFtdLAogICAgICAgIGRpcmVjdG9yaWVzOiBbXSwKICAgICAgICByb3V0ZXM6IFtdLAogICAgICAgIHJvZ3VlUm91dGVzOiBbXSwKICAgICAgICBlbmRwb2ludHM6IHsKICAgICAgICAgICcvJzogWwogICAgICAgICAgICBSb3V0ZUZpbGUoCiAgICAgICAgICAgICAgbmFtZTogJ2luZGV4JywKICAgICAgICAgICAgICBwYXRoOiAnaW5kZXguZGFydCcsCiAgICAgICAgICAgICAgcm91dGU6ICcvJywKICAgICAgICAgICAgICBwYXJhbXM6IFtdLAogICAgICAgICAgICAgIHdpbGRjYXJkOiBmYWxzZSwKICAgICAgICAgICAgKSwKICAgICAgICAgIF0sCiAgICAgICAgICAnL2hlbGxvJzogWwogICAgICAgICAgICBSb3V0ZUZpbGUoCiAgICAgICAgICAgICAgbmFtZTogJ2hlbGxvJywKICAgICAgICAgICAgICBwYXRoOiAnaGVsbG8uZGFydCcsCiAgICAgICAgICAgICAgcm91dGU6ICcvaGVsbG8nLAogICAgICAgICAgICAgIHBhcmFtczogW10sCiAgICAgICAgICAgICAgd2lsZGNhcmQ6IGZhbHNlLAogICAgICAgICAgICApLAogICAgICAgICAgICBSb3V0ZUZpbGUoCiAgICAgICAgICAgICAgbmFtZTogJ2hlbGxvX2luZGV4JywKICAgICAgICAgICAgICBwYXRoOiAnaGVsbG8vaW5kZXguZGFydCcsCiAgICAgICAgICAgICAgcm91dGU6ICcvJywKICAgICAgICAgICAgICBwYXJhbXM6IFtdLAogICAgICAgICAgICAgIHdpbGRjYXJkOiBmYWxzZSwKICAgICAgICAgICAgKSwKICAgICAgICAgIF0sCiAgICAgICAgfSwKICAgICAgKTsKCiAgICAgIGZpbmFsIGV4aXRDYWxscyA9IDxpbnQ+W107CiAgICAgIGF3YWl0IHByZV9nZW4ucHJlR2VuKAogICAgICAgIGNvbnRleHQsCiAgICAgICAgYnVpbGRDb25maWd1cmF0aW9uOiAoXykgPT4gY29uZmlndXJhdGlvbiwKICAgICAgICBleGl0OiBleGl0Q2FsbHMuYWRkLAogICAgICAgIHJ1blByb2Nlc3M6IHN1Y2Nlc3NSdW5Qcm9jZXNzLAogICAgICApOwoKICAgICAgdmVyaWZ5KAogICAgICAgICgpID0+IGxvZ2dlci5lcnIoCiAgICAgICAgICAnJydSb3V0ZSBjb25mbGljdCBkZXRlY3RlZC4gJHtsaWdodEN5YW4ud3JhcCgncm91dGVzL2hlbGxvLmRhcnQnKX0gYW5kICR7bGlnaHRDeWFuLndyYXAoJ3JvdXRlcy9oZWxsby9pbmRleC5kYXJ0Jyl9IGJvdGggcmVzb2x2ZSB0byAke2xpZ2h0Q3lhbi53cmFwKCcvaGVsbG8nKX0uJycnLAogICAgICAgICksCiAgICAgICk7CiAgICAgIGV4cGVjdChleGl0Q2FsbHMsIGVxdWFscyhbMV0pKTsKICAgIH0pOwoKICAgIHRlc3QoJ2V4aXQoMSkgZm9yIHJvZ3VlIHJvdXRlcycsICgpIGFzeW5jIHsKICAgICAgY29uc3QgY29uZmlndXJhdGlvbiA9IFJvdXRlQ29uZmlndXJhdGlvbigKICAgICAgICBtaWRkbGV3YXJlOiBbXSwKICAgICAgICBkaXJlY3RvcmllczogW10sCiAgICAgICAgcm91dGVzOiBbXSwKICAgICAgICByb2d1ZVJvdXRlczogWwogICAgICAgICAgUm91dGVGaWxlKAogICAgICAgICAgICBuYW1lOiAnaGVsbG8nLAogICAgICAgICAgICBwYXRoOiAnaGVsbG8uZGFydCcsCiAgICAgICAgICAgIHJvdXRlOiAnL2hlbGxvJywKICAgICAgICAgICAgcGFyYW1zOiBbXSwKICAgICAgICAgICAgd2lsZGNhcmQ6IGZhbHNlLAogICAgICAgICAgKSwKICAgICAgICBdLAogICAgICAgIGVuZHBvaW50czoge30sCiAgICAgICAgaW52b2tlQ3VzdG9tRW50cnlwb2ludDogdHJ1ZSwKICAgICAgKTsKCiAgICAgIGZpbmFsIGV4aXRDYWxscyA9IDxpbnQ+W107CiAgICAgIGF3YWl0IHByZV9nZW4ucHJlR2VuKAogICAgICAgIGNvbnRleHQsCiAgICAgICAgYnVpbGRDb25maWd1cmF0aW9uOiAoXykgPT4gY29uZmlndXJhdGlvbiwKICAgICAgICBleGl0OiBleGl0Q2FsbHMuYWRkLAogICAgICAgIHJ1blByb2Nlc3M6IHN1Y2Nlc3NSdW5Qcm9jZXNzLAogICAgICApOwoKICAgICAgdmVyaWZ5KAogICAgICAgICgpID0+IGxvZ2dlci5lcnIoCiAgICAgICAgICAnJydSb2d1ZSByb3V0ZSBkZXRlY3RlZC4ke2RlZmF1bHRGb3JlZ3JvdW5kLndyYXAoJyAnKX1SZW5hbWUgJHtsaWdodEN5YW4ud3JhcCgncm91dGVzL2hlbGxvLmRhcnQnKX0gdG8gJHtsaWdodEN5YW4ud3JhcCgncm91dGVzL2hlbGxvL2luZGV4LmRhcnQnKX0uJycnLAogICAgICAgICksCiAgICAgICk7CiAgICAgIGV4cGVjdChleGl0Q2FsbHMsIGVxdWFscyhbMV0pKTsKICAgIH0pOwoKICAgIHRlc3QoJ3dvcmtzIHdpdGggd29ya3NwYWNlcycsICgpIGFzeW5jIHsKICAgICAgY29uc3QgY29uZmlndXJhdGlvbiA9IFJvdXRlQ29uZmlndXJhdGlvbigKICAgICAgICBtaWRkbGV3YXJlOiBbXSwKICAgICAgICBkaXJlY3RvcmllczogW10sCiAgICAgICAgcm91dGVzOiBbXSwKICAgICAgICByb2d1ZVJvdXRlczogW10sCiAgICAgICAgZW5kcG9pbnRzOiB7fSwKICAgICAgKTsKCiAgICAgIGZpbmFsIGRpcmVjdG9yeSA9IERpcmVjdG9yeS5zeXN0ZW1UZW1wLmNyZWF0ZVRlbXBTeW5jKCk7CiAgICAgIEZpbGUoCiAgICAgICAgcGF0aC5qb2luKGRpcmVjdG9yeS5wYXRoLCAncHVic3BlYy55YW1sJyksCiAgICAgICkud3JpdGVBc1N0cmluZ1N5bmMod29ya3NwYWNlUm9vdCk7CiAgICAgIGZpbmFsIHNlcnZlciA9IERpcmVjdG9yeSgKICAgICAgICBwYXRoLmpvaW4oZGlyZWN0b3J5LnBhdGgsICdzZXJ2ZXInKSwKICAgICAgKS4uY3JlYXRlU3luYygpOwogICAgICBGaWxlKAogICAgICAgIHBhdGguam9pbihzZXJ2ZXIucGF0aCwgJ3B1YnNwZWMueWFtbCcpLAogICAgICApLndyaXRlQXNTdHJpbmdTeW5jKHdvcmtzcGFjZUNoaWxkKTsKICAgICAgZmluYWwgZXhpdENhbGxzID0gPGludD5bXTsKICAgICAgYXdhaXQgcHJlX2dlbi5wcmVHZW4oCiAgICAgICAgY29udGV4dCwKICAgICAgICBidWlsZENvbmZpZ3VyYXRpb246IChfKSA9PiBjb25maWd1cmF0aW9uLAogICAgICAgIGV4aXQ6IGV4aXRDYWxscy5hZGQsCiAgICAgICAgZGlyZWN0b3J5OiBzZXJ2ZXIsCiAgICAgICAgcnVuUHJvY2Vzczogc3VjY2Vzc1J1blByb2Nlc3MsCiAgICAgICAgY29weVBhdGg6IChfLCBfXykgYXN5bmMge30sCiAgICAgICk7CgogICAgICBleHBlY3QoZXhpdENhbGxzLCBpc0VtcHR5KTsKICAgICAgZGlyZWN0b3J5LmRlbGV0ZShyZWN1cnNpdmU6IHRydWUpLmlnbm9yZSgpOwogICAgfSk7CgogICAgdGVzdCgnd29ya3Mgd2l0aCBleHRlcm5hbCBkZXBlbmRlbmNpZXMnLCAoKSBhc3luYyB7CiAgICAgIGNvbnN0IGNvbmZpZ3VyYXRpb24gPSBSb3V0ZUNvbmZpZ3VyYXRpb24oCiAgICAgICAgbWlkZGxld2FyZTogW10sCiAgICAgICAgZGlyZWN0b3JpZXM6IFtdLAogICAgICAgIHJvdXRlczogW10sCiAgICAgICAgcm9ndWVSb3V0ZXM6IFtdLAogICAgICAgIGVuZHBvaW50czoge30sCiAgICAgICk7CgogICAgICBmaW5hbCBkaXJlY3RvcnkgPSBEaXJlY3Rvcnkuc3lzdGVtVGVtcC5jcmVhdGVUZW1wU3luYygpOwogICAgICBGaWxlKAogICAgICAgIHBhdGguam9pbihkaXJlY3RvcnkucGF0aCwgJ3B1YnNwZWMueWFtbCcpLAogICAgICApLndyaXRlQXNTdHJpbmdTeW5jKGZvb1BhdGgpOwogICAgICBmaW5hbCBleGl0Q2FsbHMgPSA8aW50PltdOwogICAgICBhd2FpdCBwcmVfZ2VuLnByZUdlbigKICAgICAgICBjb250ZXh0LAogICAgICAgIGJ1aWxkQ29uZmlndXJhdGlvbjogKF8pID0+IGNvbmZpZ3VyYXRpb24sCiAgICAgICAgZXhpdDogZXhpdENhbGxzLmFkZCwKICAgICAgICBkaXJlY3Rvcnk6IGRpcmVjdG9yeSwKICAgICAgICBydW5Qcm9jZXNzOiBzdWNjZXNzUnVuUHJvY2VzcywKICAgICAgICBjb3B5UGF0aDogKF8sIF9fKSBhc3luYyB7fSwKICAgICAgKTsKCiAgICAgIGV4cGVjdChleGl0Q2FsbHMsIGlzRW1wdHkpOwogICAgICBkaXJlY3RvcnkuZGVsZXRlKHJlY3Vyc2l2ZTogdHJ1ZSkuaWdub3JlKCk7CiAgICB9KTsKCiAgICB0ZXN0KCdyZXRhaW5zIGludm9rZUN1c3RvbUVudHJ5cG9pbnQgKHRydWUpJywgKCkgYXN5bmMgewogICAgICBjb25zdCBjb25maWd1cmF0aW9uID0gUm91dGVDb25maWd1cmF0aW9uKAogICAgICAgIG1pZGRsZXdhcmU6IFtdLAogICAgICAgIGRpcmVjdG9yaWVzOiBbXSwKICAgICAgICByb3V0ZXM6IFtdLAogICAgICAgIHJvZ3VlUm91dGVzOiBbXSwKICAgICAgICBlbmRwb2ludHM6IHt9LAogICAgICAgIGludm9rZUN1c3RvbUVudHJ5cG9pbnQ6IHRydWUsCiAgICAgICk7CiAgICAgIGZpbmFsIGV4aXRDYWxscyA9IDxpbnQ+W107CiAgICAgIGF3YWl0IHByZV9nZW4ucHJlR2VuKAogICAgICAgIGNvbnRleHQsCiAgICAgICAgYnVpbGRDb25maWd1cmF0aW9uOiAoXykgPT4gY29uZmlndXJhdGlvbiwKICAgICAgICBleGl0OiBleGl0Q2FsbHMuYWRkLAogICAgICAgIHJ1blByb2Nlc3M6IHN1Y2Nlc3NSdW5Qcm9jZXNzLAogICAgICApOwogICAgICBleHBlY3QoZXhpdENhbGxzLCBpc0VtcHR5KTsKICAgICAgdmVyaWZ5TmV2ZXIoKCkgPT4gbG9nZ2VyLmVycihhbnkoKSkpOwogICAgICBleHBlY3QoCiAgICAgICAgY29udGV4dC52YXJzLAogICAgICAgIGVxdWFscyh7CiAgICAgICAgICAnZGlyZWN0b3JpZXMnOiA8Um91dGVEaXJlY3Rvcnk+W10sCiAgICAgICAgICAncm91dGVzJzogPFJvdXRlRmlsZT5bXSwKICAgICAgICAgICdtaWRkbGV3YXJlJzogPE1pZGRsZXdhcmVGaWxlPltdLAogICAgICAgICAgJ2dsb2JhbE1pZGRsZXdhcmUnOiBmYWxzZSwKICAgICAgICAgICdzZXJ2ZVN0YXRpY0ZpbGVzJzogZmFsc2UsCiAgICAgICAgICAnaW52b2tlQ3VzdG9tRW50cnlwb2ludCc6IHRydWUsCiAgICAgICAgICAnaW52b2tlQ3VzdG9tSW5pdCc6IGZhbHNlLAogICAgICAgICAgJ3BhdGhEZXBlbmRlbmNpZXMnOiA8U3RyaW5nPltdLAogICAgICAgICAgJ2hhc0V4dGVybmFsRGVwZW5kZW5jaWVzJzogZmFsc2UsCiAgICAgICAgICAnZGFydFZlcnNpb24nOiAnc3RhYmxlJywKICAgICAgICAgICdhZGREb2NrZXJmaWxlJzogdHJ1ZSwKICAgICAgICB9KSwKICAgICAgKTsKICAgIH0pOwoKICAgIHRlc3QoImRvbid0IGNyZWF0ZSB0aGUgZG9ja2VyZmlsZSBpZiBvbmUgYWxyZWFkeSBleGlzdHMgb24gdGhlIGZvbGRlci4iLAogICAgICAgICgpIGFzeW5jIHsKICAgICAgY29uc3QgY29uZmlndXJhdGlvbiA9IFJvdXRlQ29uZmlndXJhdGlvbigKICAgICAgICBtaWRkbGV3YXJlOiBbXSwKICAgICAgICBkaXJlY3RvcmllczogW10sCiAgICAgICAgcm91dGVzOiBbXSwKICAgICAgICByb2d1ZVJvdXRlczogW10sCiAgICAgICAgZW5kcG9pbnRzOiB7fSwKICAgICAgKTsKCiAgICAgIGZpbmFsIGRpcmVjdG9yeSA9IERpcmVjdG9yeS5zeXN0ZW1UZW1wLmNyZWF0ZVRlbXBTeW5jKCk7CiAgICAgIEZpbGUocGF0aC5qb2luKGRpcmVjdG9yeS5wYXRoLCAncHVic3BlYy55YW1sJykpLndyaXRlQXNTdHJpbmdTeW5jKAogICAgICAgICcnJwpuYW1lOiBleGFtcGxlCnZlcnNpb246IDAuMS4wCmVudmlyb25tZW50OgogIHNkazogXjIuMTcuMApkZXBlbmRlbmNpZXM6CiAgbWFzb246IGFueQogIHRlc3Q6IGFueQonJycsCiAgICAgICk7CgogICAgICBGaWxlKHBhdGguam9pbihkaXJlY3RvcnkucGF0aCwgJ3B1YnNwZWMubG9jaycpKS53cml0ZUFzU3RyaW5nU3luYygKICAgICAgICBub1BhdGhEZXBlbmRlbmNpZXMsCiAgICAgICk7CiAgICAgIEZpbGUocGF0aC5qb2luKGRpcmVjdG9yeS5wYXRoLCAnRG9ja2VyZmlsZScpKS53cml0ZUFzU3RyaW5nU3luYygKICAgICAgICAnJywKICAgICAgKTsKCiAgICAgIGZpbmFsIGV4aXRDYWxscyA9IDxpbnQ+W107CiAgICAgIGF3YWl0IHByZV9nZW4ucHJlR2VuKAogICAgICAgIGNvbnRleHQsCiAgICAgICAgYnVpbGRDb25maWd1cmF0aW9uOiAoXykgPT4gY29uZmlndXJhdGlvbiwKICAgICAgICBleGl0OiBleGl0Q2FsbHMuYWRkLAogICAgICAgIGRpcmVjdG9yeTogZGlyZWN0b3J5LAogICAgICAgIHJ1blByb2Nlc3M6IHN1Y2Nlc3NSdW5Qcm9jZXNzLAogICAgICApOwoKICAgICAgZXhwZWN0KAogICAgICAgIGNvbnRleHQudmFycywKICAgICAgICBlcXVhbHMoewogICAgICAgICAgJ2RpcmVjdG9yaWVzJzogPFJvdXRlRGlyZWN0b3J5PltdLAogICAgICAgICAgJ3JvdXRlcyc6IDxSb3V0ZUZpbGU+W10sCiAgICAgICAgICAnbWlkZGxld2FyZSc6IDxNaWRkbGV3YXJlRmlsZT5bXSwKICAgICAgICAgICdnbG9iYWxNaWRkbGV3YXJlJzogZmFsc2UsCiAgICAgICAgICAnc2VydmVTdGF0aWNGaWxlcyc6IGZhbHNlLAogICAgICAgICAgJ2ludm9rZUN1c3RvbUVudHJ5cG9pbnQnOiBmYWxzZSwKICAgICAgICAgICdpbnZva2VDdXN0b21Jbml0JzogZmFsc2UsCiAgICAgICAgICAnaGFzRXh0ZXJuYWxEZXBlbmRlbmNpZXMnOiBmYWxzZSwKICAgICAgICAgICdwYXRoRGVwZW5kZW5jaWVzJzogPFN0cmluZz5bXSwKICAgICAgICAgICdkYXJ0VmVyc2lvbic6ICdzdGFibGUnLAogICAgICAgICAgJ2FkZERvY2tlcmZpbGUnOiBmYWxzZSwKICAgICAgICB9KSwKICAgICAgKTsKICAgICAgZGlyZWN0b3J5LmRlbGV0ZShyZWN1cnNpdmU6IHRydWUpLmlnbm9yZSgpOwogICAgfSk7CgogICAgdGVzdCgncmV0YWlucyBpbnZva2VDdXN0b21Jbml0ICh0cnVlKScsICgpIGFzeW5jIHsKICAgICAgY29uc3QgY29uZmlndXJhdGlvbiA9IFJvdXRlQ29uZmlndXJhdGlvbigKICAgICAgICBtaWRkbGV3YXJlOiBbXSwKICAgICAgICBkaXJlY3RvcmllczogW10sCiAgICAgICAgcm91dGVzOiBbXSwKICAgICAgICByb2d1ZVJvdXRlczogW10sCiAgICAgICAgZW5kcG9pbnRzOiB7fSwKICAgICAgICBpbnZva2VDdXN0b21Jbml0OiB0cnVlLAogICAgICApOwogICAgICBmaW5hbCBleGl0Q2FsbHMgPSA8aW50PltdOwogICAgICBhd2FpdCBwcmVfZ2VuLnByZUdlbigKICAgICAgICBjb250ZXh0LAogICAgICAgIGJ1aWxkQ29uZmlndXJhdGlvbjogKF8pID0+IGNvbmZpZ3VyYXRpb24sCiAgICAgICAgZXhpdDogZXhpdENhbGxzLmFkZCwKICAgICAgICBydW5Qcm9jZXNzOiBzdWNjZXNzUnVuUHJvY2VzcywKICAgICAgKTsKICAgICAgZXhwZWN0KGV4aXRDYWxscywgaXNFbXB0eSk7CiAgICAgIHZlcmlmeU5ldmVyKCgpID0+IGxvZ2dlci5lcnIoYW55KCkpKTsKICAgICAgZXhwZWN0KAogICAgICAgIGNvbnRleHQudmFycywKICAgICAgICBlcXVhbHMoewogICAgICAgICAgJ2RpcmVjdG9yaWVzJzogPFJvdXRlRGlyZWN0b3J5PltdLAogICAgICAgICAgJ3JvdXRlcyc6IDxSb3V0ZUZpbGU+W10sCiAgICAgICAgICAnbWlkZGxld2FyZSc6IDxNaWRkbGV3YXJlRmlsZT5bXSwKICAgICAgICAgICdnbG9iYWxNaWRkbGV3YXJlJzogZmFsc2UsCiAgICAgICAgICAnc2VydmVTdGF0aWNGaWxlcyc6IGZhbHNlLAogICAgICAgICAgJ2ludm9rZUN1c3RvbUVudHJ5cG9pbnQnOiBmYWxzZSwKICAgICAgICAgICdpbnZva2VDdXN0b21Jbml0JzogdHJ1ZSwKICAgICAgICAgICdoYXNFeHRlcm5hbERlcGVuZGVuY2llcyc6IGZhbHNlLAogICAgICAgICAgJ3BhdGhEZXBlbmRlbmNpZXMnOiA8U3RyaW5nPltdLAogICAgICAgICAgJ2RhcnRWZXJzaW9uJzogJ3N0YWJsZScsCiAgICAgICAgICAnYWRkRG9ja2VyZmlsZSc6IHRydWUsCiAgICAgICAgfSksCiAgICAgICk7CiAgICB9KTsKCiAgICB0ZXN0KAogICAgICAndXBkYXRlcyBjb250ZXh0LnZhcnMgd2hlbiBidWlsZFJvdXRlQ29uZmlndXJhdGlvbiBzdWNjZWVkcycsCiAgICAgICgpIGFzeW5jIHsKICAgICAgICBjb25zdCBjb25maWd1cmF0aW9uID0gUm91dGVDb25maWd1cmF0aW9uKAogICAgICAgICAgZ2xvYmFsTWlkZGxld2FyZTogTWlkZGxld2FyZUZpbGUoCiAgICAgICAgICAgIG5hbWU6ICdtaWRkbGV3YXJlJywKICAgICAgICAgICAgcGF0aDogJ21pZGRsZXdhcmUuZGFydCcsCiAgICAgICAgICApLAogICAgICAgICAgbWlkZGxld2FyZTogWwogICAgICAgICAgICBNaWRkbGV3YXJlRmlsZSgKICAgICAgICAgICAgICBuYW1lOiAnaGVsbG9fbWlkZGxld2FyZScsCiAgICAgICAgICAgICAgcGF0aDogJ2hlbGxvL21pZGRsZXdhcmUuZGFydCcsCiAgICAgICAgICAgICksCiAgICAgICAgICBdLAogICAgICAgICAgZGlyZWN0b3JpZXM6IFsKICAgICAgICAgICAgUm91dGVEaXJlY3RvcnkoCiAgICAgICAgICAgICAgbmFtZTogJ18nLAogICAgICAgICAgICAgIHJvdXRlOiAnLycsCiAgICAgICAgICAgICAgbWlkZGxld2FyZTogW10sCiAgICAgICAgICAgICAgZmlsZXM6IFsKICAgICAgICAgICAgICAgIFJvdXRlRmlsZSgKICAgICAgICAgICAgICAgICAgbmFtZTogJ2luZGV4JywKICAgICAgICAgICAgICAgICAgcGF0aDogJ2luZGV4LmRhcnQnLAogICAgICAgICAgICAgICAgICByb3V0ZTogJy8nLAogICAgICAgICAgICAgICAgICBwYXJhbXM6IFtdLAogICAgICAgICAgICAgICAgICB3aWxkY2FyZDogZmFsc2UsCiAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgUm91dGVGaWxlKAogICAgICAgICAgICAgICAgICBuYW1lOiAnaGVsbG8nLAogICAgICAgICAgICAgICAgICBwYXRoOiAnaGVsbG8uZGFydCcsCiAgICAgICAgICAgICAgICAgIHJvdXRlOiAnL2hlbGxvJywKICAgICAgICAgICAgICAgICAgcGFyYW1zOiBbXSwKICAgICAgICAgICAgICAgICAgd2lsZGNhcmQ6IGZhbHNlLAogICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgIHBhcmFtczogW10sCiAgICAgICAgICAgICksCiAgICAgICAgICBdLAogICAgICAgICAgcm91dGVzOiBbCiAgICAgICAgICAgIFJvdXRlRmlsZSgKICAgICAgICAgICAgICBuYW1lOiAnaW5kZXgnLAogICAgICAgICAgICAgIHBhdGg6ICdpbmRleC5kYXJ0JywKICAgICAgICAgICAgICByb3V0ZTogJy8nLAogICAgICAgICAgICAgIHBhcmFtczogW10sCiAgICAgICAgICAgICAgd2lsZGNhcmQ6IGZhbHNlLAogICAgICAgICAgICApLAogICAgICAgICAgICBSb3V0ZUZpbGUoCiAgICAgICAgICAgICAgbmFtZTogJ2hlbGxvJywKICAgICAgICAgICAgICBwYXRoOiAnaGVsbG8uZGFydCcsCiAgICAgICAgICAgICAgcm91dGU6ICcvaGVsbG8nLAogICAgICAgICAgICAgIHBhcmFtczogW10sCiAgICAgICAgICAgICAgd2lsZGNhcmQ6IGZhbHNlLAogICAgICAgICAgICApLAogICAgICAgICAgXSwKICAgICAgICAgIHJvZ3VlUm91dGVzOiBbXSwKICAgICAgICAgIGVuZHBvaW50czogewogICAgICAgICAgICAnLyc6IFsKICAgICAgICAgICAgICBSb3V0ZUZpbGUoCiAgICAgICAgICAgICAgICBuYW1lOiAnaW5kZXgnLAogICAgICAgICAgICAgICAgcGF0aDogJ2luZGV4LmRhcnQnLAogICAgICAgICAgICAgICAgcm91dGU6ICcvJywKICAgICAgICAgICAgICAgIHBhcmFtczogW10sCiAgICAgICAgICAgICAgICB3aWxkY2FyZDogZmFsc2UsCiAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgJy9oZWxsbyc6IFsKICAgICAgICAgICAgICBSb3V0ZUZpbGUoCiAgICAgICAgICAgICAgICBuYW1lOiAnaGVsbG8nLAogICAgICAgICAgICAgICAgcGF0aDogJ2hlbGxvLmRhcnQnLAogICAgICAgICAgICAgICAgcm91dGU6ICcvaGVsbG8nLAogICAgICAgICAgICAgICAgcGFyYW1zOiBbXSwKICAgICAgICAgICAgICAgIHdpbGRjYXJkOiBmYWxzZSwKICAgICAgICAgICAgICApLAogICAgICAgICAgICBdLAogICAgICAgICAgfSwKICAgICAgICAgIHNlcnZlU3RhdGljRmlsZXM6IHRydWUsCiAgICAgICAgKTsKICAgICAgICBmaW5hbCBleGl0Q2FsbHMgPSA8aW50PltdOwogICAgICAgIGF3YWl0IHByZV9nZW4ucHJlR2VuKAogICAgICAgICAgY29udGV4dCwKICAgICAgICAgIGJ1aWxkQ29uZmlndXJhdGlvbjogKF8pID0+IGNvbmZpZ3VyYXRpb24sCiAgICAgICAgICBleGl0OiBleGl0Q2FsbHMuYWRkLAogICAgICAgICAgcnVuUHJvY2Vzczogc3VjY2Vzc1J1blByb2Nlc3MsCiAgICAgICAgKTsKICAgICAgICBleHBlY3QoZXhpdENhbGxzLCBpc0VtcHR5KTsKICAgICAgICB2ZXJpZnlOZXZlcigoKSA9PiBsb2dnZXIuZXJyKGFueSgpKSk7CiAgICAgICAgZXhwZWN0KAogICAgICAgICAgY29udGV4dC52YXJzLAogICAgICAgICAgZXF1YWxzKHsKICAgICAgICAgICAgJ2RpcmVjdG9yaWVzJzogWwogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICduYW1lJzogJ18nLAogICAgICAgICAgICAgICAgJ3JvdXRlJzogJy8nLAogICAgICAgICAgICAgICAgJ21pZGRsZXdhcmUnOiA8TWFwPFN0cmluZywgZHluYW1pYz4+W10sCiAgICAgICAgICAgICAgICAnZmlsZXMnOiBbCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAnbmFtZSc6ICdpbmRleCcsCiAgICAgICAgICAgICAgICAgICAgJ3BhdGgnOiAnaW5kZXguZGFydCcsCiAgICAgICAgICAgICAgICAgICAgJ3JvdXRlJzogJy8nLAogICAgICAgICAgICAgICAgICAgICdmaWxlX3BhcmFtcyc6IGNvbnN0IDxTdHJpbmc+W10sCiAgICAgICAgICAgICAgICAgICAgJ3dpbGRjYXJkJzogZmFsc2UsCiAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAnbmFtZSc6ICdoZWxsbycsCiAgICAgICAgICAgICAgICAgICAgJ3BhdGgnOiAnaGVsbG8uZGFydCcsCiAgICAgICAgICAgICAgICAgICAgJ3JvdXRlJzogJy9oZWxsbycsCiAgICAgICAgICAgICAgICAgICAgJ2ZpbGVfcGFyYW1zJzogY29uc3QgPFN0cmluZz5bXSwKICAgICAgICAgICAgICAgICAgICAnd2lsZGNhcmQnOiBmYWxzZSwKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICdkaXJlY3RvcnlfcGFyYW1zJzogY29uc3QgPFN0cmluZz5bXSwKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICdyb3V0ZXMnOiBbCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJ25hbWUnOiAnaW5kZXgnLAogICAgICAgICAgICAgICAgJ3BhdGgnOiAnaW5kZXguZGFydCcsCiAgICAgICAgICAgICAgICAncm91dGUnOiAnLycsCiAgICAgICAgICAgICAgICAnZmlsZV9wYXJhbXMnOiBjb25zdCA8U3RyaW5nPltdLAogICAgICAgICAgICAgICAgJ3dpbGRjYXJkJzogZmFsc2UsCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAnbmFtZSc6ICdoZWxsbycsCiAgICAgICAgICAgICAgICAncGF0aCc6ICdoZWxsby5kYXJ0JywKICAgICAgICAgICAgICAgICdyb3V0ZSc6ICcvaGVsbG8nLAogICAgICAgICAgICAgICAgJ2ZpbGVfcGFyYW1zJzogY29uc3QgPFN0cmluZz5bXSwKICAgICAgICAgICAgICAgICd3aWxkY2FyZCc6IGZhbHNlLAogICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgJ21pZGRsZXdhcmUnOiBbCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJ25hbWUnOiAnaGVsbG9fbWlkZGxld2FyZScsCiAgICAgICAgICAgICAgICAncGF0aCc6ICdoZWxsby9taWRkbGV3YXJlLmRhcnQnLAogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICdnbG9iYWxNaWRkbGV3YXJlJzogewogICAgICAgICAgICAgICduYW1lJzogJ21pZGRsZXdhcmUnLAogICAgICAgICAgICAgICdwYXRoJzogJ21pZGRsZXdhcmUuZGFydCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICdzZXJ2ZVN0YXRpY0ZpbGVzJzogdHJ1ZSwKICAgICAgICAgICAgJ2ludm9rZUN1c3RvbUVudHJ5cG9pbnQnOiBmYWxzZSwKICAgICAgICAgICAgJ2ludm9rZUN1c3RvbUluaXQnOiBmYWxzZSwKICAgICAgICAgICAgJ2hhc0V4dGVybmFsRGVwZW5kZW5jaWVzJzogZmFsc2UsCiAgICAgICAgICAgICdwYXRoRGVwZW5kZW5jaWVzJzogPFN0cmluZz5bXSwKICAgICAgICAgICAgJ2RhcnRWZXJzaW9uJzogJ3N0YWJsZScsCiAgICAgICAgICAgICdhZGREb2NrZXJmaWxlJzogdHJ1ZSwKICAgICAgICAgIH0pLAogICAgICAgICk7CiAgICAgIH0sCiAgICApOwogIH0pOwp9Cg==", "type": "text" }, { - "path": "test/pubspec_locks.dart", + "path": "test/pubspecs.dart", "data": - "Ly8vIEFuIGFydGlmaWNpYWxseSBjcmFmdGVkIGBwdWJzcGVjLmxvY2tgIGZpbGUgd2l0aDoKLy8vCi8vLyAqIEEgdHJhbnNpdGl2ZSBkZXBlbmRlbmN5LgovLy8gKiBBIGRpcmVjdCBtYWluIHBhdGggZGVwZW5kZW5jeSB0aGF0IGlzIG5vdCBhIGNoaWxkIG9mIHRoZSBwcm9qZWN0Ci8vLyBkaXJlY3RvcnkuCi8vLyAqIEEgZGlyZWN0IG1haW4gcGF0aCBkZXBlbmRlbmN5IHRoYXQgaXMgbm90IGEgY2hpbGQgb2YgdGhlIHByb2plY3QKLy8vIGRpcmVjdG9yeSBhbmQgaGFzIGEgZGlmZmVyZW50IHBhY2thZ2UgbmFtZSB0aGFuIHRoZSBkaXJlY3RvcnkgbmFtZS4KLy8vICogQSBkaXJlY3QgbWFpbiBkZXBlbmRlbmN5IHRoYXQgaXMgaG9zdGVkLgovLy8gKiBBIGRpcmVjdCBkZXYgbWFpbiBkZXBlbmRlbmN5IHRoYXQgaXMgaG9zdGVkLgovLy8gKiBBIGRpcmVjdCBvdmVycmlkZGVuIGRlcGVuZGVuY3kgZnJvbSBnaXQuCmNvbnN0IGZvb1BhdGggPSAnJycKcGFja2FnZXM6CiAgYXJnczoKICAgIGRlcGVuZGVuY3k6IHRyYW5zaXRpdmUKICAgIGRlc2NyaXB0aW9uOgogICAgICBuYW1lOiBhcmdzCiAgICAgIHNoYTI1NjogZWVmNmM0NmI2MjJlMDQ5NGEzNmM1YTEyZDEwZDc3ZmI0ZTg1NTUwMWE5MWMxYjllZjkzMzkzMjZlNThmMDU5NgogICAgICB1cmw6ICJodHRwczovL3B1Yi5kZXYiCiAgICBzb3VyY2U6IGhvc3RlZAogICAgdmVyc2lvbjogIjIuNC4yIgogIGZvbzoKICAgIGRlcGVuZGVuY3k6ICJkaXJlY3QgbWFpbiIKICAgIGRlc2NyaXB0aW9uOgogICAgICBwYXRoOiAiLi4vLi4vZm9vIgogICAgICByZWxhdGl2ZTogdHJ1ZQogICAgc291cmNlOiBwYXRoCiAgICB2ZXJzaW9uOiAiMC4wLjAiCiAgc2Vjb25kX2ZvbzoKICAgIGRlcGVuZGVuY3k6ICJkaXJlY3QgbWFpbiIKICAgIGRlc2NyaXB0aW9uOgogICAgICBwYXRoOiAiLi4vLi4vZm9vMiIKICAgICAgcmVsYXRpdmU6IHRydWUKICAgIHNvdXJjZTogcGF0aAogICAgdmVyc2lvbjogIjAuMC4wIgogIGRpcmVjdF9tYWluOgogICAgZGVwZW5kZW5jeTogImRpcmVjdCBtYWluIgogICAgZGVzY3JpcHRpb246CiAgICAgIG5hbWU6IGRpcmVjdF9tYWluCiAgICAgIHNoYTI1NjogZmRjOWVhOTA1ZTdjNjkwZmUzOWQyZjk5NDZiN2FlYWQ4NmZkOTc2ZjhlZGY5N2QyNTIxYTY1ZDI2MGJiZjUwOQogICAgICB1cmw6ICJodHRwczovL3B1Yi5kZXYiCiAgICBzb3VyY2U6IGhvc3RlZAogICAgdmVyc2lvbjogIjAuMS4wLWRldi41MCIKICB0ZXN0OgogICAgZGVwZW5kZW5jeTogImRpcmVjdCBkZXYiCiAgICBkZXNjcmlwdGlvbjoKICAgICAgbmFtZTogdGVzdAogICAgICBzaGEyNTY6ICI5YjBkZDhlMzZhZjRhNWIxNTY5MDI5OTQ5ZDUwYTUyY2IyYTJhMmZkYWEyMGNlYmI5NmU2NjAzYjlhZTI0MWY5IgogICAgICB1cmw6ICJodHRwczovL3B1Yi5kZXYiCiAgICBzb3VyY2U6IGhvc3RlZAogICAgdmVyc2lvbjogIjEuMjQuNiIKICBkaXJlY3Rfb3ZlcnJpZGRlbjoKICAgIGRlcGVuZGVuY3k6ICJkaXJlY3Qgb3ZlcnJpZGRlbiIKICAgIGRlc2NyaXB0aW9uOgogICAgICBwYXRoOiAicGFja2FnZXMvbWFzb24iCiAgICAgIHJlZjogIjcyYzMwNmE4ZDhhYmYzMDZiNWQwMjRmOTVhYWMyOWJhNWZkOTY1NzciCiAgICAgIHJlc29sdmVkLXJlZjogIjcyYzMwNmE4ZDhhYmYzMDZiNWQwMjRmOTVhYWMyOWJhNWZkOTY1NzciCiAgICAgIHVybDogImh0dHBzOi8vZ2l0aHViLmNvbS9hbGVzdGlhZ28vbWFzb24iCiAgICBzb3VyY2U6IGdpdAogICAgdmVyc2lvbjogIjAuMS4wLWRldi41MiIKc2RrczoKICBkYXJ0OiAiPj0zLjAuMCA8NC4wLjAiCicnJzsKCi8vLyBBbiBhcnRpZmljaWFsbHkgY3JhZnRlZCBgcHVic3BlYy5sb2NrYCBmaWxlIHdpdGg6Ci8vLwovLy8gKiBBIHRyYW5zaXRpdmUgZGVwZW5kZW5jeS4KLy8vICogQSBkaXJlY3QgbWFpbiBwYXRoIGRlcGVuZGVuY3kgdGhhdCBpcyBub3QgYSBjaGlsZCBvZiB0aGUgcHJvamVjdAovLy8gZGlyZWN0b3J5LgovLy8gKiBBIGRpcmVjdCBtYWluIHBhdGggZGVwZW5kZW5jeSB0aGF0IGlzIGEgY2hpbGQgb2YgdGhlIHByb2plY3QgZGlyZWN0b3J5LgovLy8gKiBBIGRpcmVjdCBtYWluIGRlcGVuZGVuY3kgdGhhdCBpcyBob3N0ZWQuCi8vLyAqIEEgZGlyZWN0IGRldiBtYWluIGRlcGVuZGVuY3kgdGhhdCBpcyBob3N0ZWQuCmNvbnN0IGZvb1BhdGhXaXRoSW50ZXJuYWxEZXBlbmRlbmN5ID0gJycnCnBhY2thZ2VzOgogIGFyZ3M6CiAgICBkZXBlbmRlbmN5OiB0cmFuc2l0aXZlCiAgICBkZXNjcmlwdGlvbjoKICAgICAgbmFtZTogYXJncwogICAgICBzaGEyNTY6IGVlZjZjNDZiNjIyZTA0OTRhMzZjNWExMmQxMGQ3N2ZiNGU4NTU1MDFhOTFjMWI5ZWY5MzM5MzI2ZTU4ZjA1OTYKICAgICAgdXJsOiAiaHR0cHM6Ly9wdWIuZGV2IgogICAgc291cmNlOiBob3N0ZWQKICAgIHZlcnNpb246ICIyLjQuMiIKICBmb286CiAgICBkZXBlbmRlbmN5OiAiZGlyZWN0IG1haW4iCiAgICBkZXNjcmlwdGlvbjoKICAgICAgcGF0aDogIi4uLy4uL2ZvbyIKICAgICAgcmVsYXRpdmU6IHRydWUKICAgIHNvdXJjZTogcGF0aAogICAgdmVyc2lvbjogIjAuMC4wIgogIGJhcjoKICAgIGRlcGVuZGVuY3k6ICJkaXJlY3QgbWFpbiIKICAgIGRlc2NyaXB0aW9uOgogICAgICBwYXRoOiAicGFja2FnZXMvYmFyIgogICAgICByZWxhdGl2ZTogdHJ1ZQogICAgc291cmNlOiBwYXRoCiAgICB2ZXJzaW9uOiAiMC4wLjAiCiAgbWFzb246CiAgICBkZXBlbmRlbmN5OiAiZGlyZWN0IG1haW4iCiAgICBkZXNjcmlwdGlvbjoKICAgICAgbmFtZTogbWFzb24KICAgICAgc2hhMjU2OiBmZGM5ZWE5MDVlN2M2OTBmZTM5ZDJmOTk0NmI3YWVhZDg2ZmQ5NzZmOGVkZjk3ZDI1MjFhNjVkMjYwYmJmNTA5CiAgICAgIHVybDogImh0dHBzOi8vcHViLmRldiIKICAgIHNvdXJjZTogaG9zdGVkCiAgICB2ZXJzaW9uOiAiMC4xLjAtZGV2LjUwIgogIHRlc3Q6CiAgICBkZXBlbmRlbmN5OiAiZGlyZWN0IGRldiIKICAgIGRlc2NyaXB0aW9uOgogICAgICBuYW1lOiB0ZXN0CiAgICAgIHNoYTI1NjogIjliMGRkOGUzNmFmNGE1YjE1NjkwMjk5NDlkNTBhNTJjYjJhMmEyZmRhYTIwY2ViYjk2ZTY2MDNiOWFlMjQxZjkiCiAgICAgIHVybDogImh0dHBzOi8vcHViLmRldiIKICAgIHNvdXJjZTogaG9zdGVkCiAgICB2ZXJzaW9uOiAiMS4yNC42IgpzZGtzOgogIGRhcnQ6ICI+PTMuMC4wIDw0LjAuMCIKJycnOwoKLy8vIEFuIGFydGlmaWNpYWxseSBjcmFmdGVkIGBwdWJzcGVjLmxvY2tgIGZpbGUgd2l0aDoKLy8vCi8vLyAqIEEgdHJhbnNpdGl2ZSBkZXBlbmRlbmN5LgovLy8gKiBBIGRpcmVjdCBtYWluIGRlcGVuZGVuY3kgdGhhdCBpcyBob3N0ZWQuCi8vLyAqIEEgZGlyZWN0IGRldiBtYWluIGRlcGVuZGVuY3kgdGhhdCBpcyBob3N0ZWQuCmNvbnN0IG5vUGF0aERlcGVuZGVuY2llcyA9ICcnJwpwYWNrYWdlczoKICBhcmdzOgogICAgZGVwZW5kZW5jeTogdHJhbnNpdGl2ZQogICAgZGVzY3JpcHRpb246CiAgICAgIG5hbWU6IGFyZ3MKICAgICAgc2hhMjU2OiBlZWY2YzQ2YjYyMmUwNDk0YTM2YzVhMTJkMTBkNzdmYjRlODU1NTAxYTkxYzFiOWVmOTMzOTMyNmU1OGYwNTk2CiAgICAgIHVybDogImh0dHBzOi8vcHViLmRldiIKICAgIHNvdXJjZTogaG9zdGVkCiAgICB2ZXJzaW9uOiAiMi40LjIiCiAgbWFzb246CiAgICBkZXBlbmRlbmN5OiAiZGlyZWN0IG1haW4iCiAgICBkZXNjcmlwdGlvbjoKICAgICAgbmFtZTogbWFzb24KICAgICAgc2hhMjU2OiBmZGM5ZWE5MDVlN2M2OTBmZTM5ZDJmOTk0NmI3YWVhZDg2ZmQ5NzZmOGVkZjk3ZDI1MjFhNjVkMjYwYmJmNTA5CiAgICAgIHVybDogImh0dHBzOi8vcHViLmRldiIKICAgIHNvdXJjZTogaG9zdGVkCiAgICB2ZXJzaW9uOiAiMC4xLjAtZGV2LjUwIgogIHRlc3Q6CiAgICBkZXBlbmRlbmN5OiAiZGlyZWN0IGRldiIKICAgIGRlc2NyaXB0aW9uOgogICAgICBuYW1lOiB0ZXN0CiAgICAgIHNoYTI1NjogIjliMGRkOGUzNmFmNGE1YjE1NjkwMjk5NDlkNTBhNTJjYjJhMmEyZmRhYTIwY2ViYjk2ZTY2MDNiOWFlMjQxZjkiCiAgICAgIHVybDogImh0dHBzOi8vcHViLmRldiIKICAgIHNvdXJjZTogaG9zdGVkCiAgICB2ZXJzaW9uOiAiMS4yNC42IgpzZGtzOgogIGRhcnQ6ICI+PTMuMC4wIDw0LjAuMCIKJycnOwo=", + "Ly8vIEFuIGFydGlmaWNpYWxseSBjcmFmdGVkIGBwdWJzcGVjLnlhbWxgIGZpbGUgd2l0aDoKLy8vCi8vLyAqIEEgZGlyZWN0IG1haW4gcGF0aCBkZXBlbmRlbmN5IHRoYXQgaXMgbm90IGEgY2hpbGQgb2YgdGhlIHByb2plY3QKLy8vIGRpcmVjdG9yeS4KLy8vICogQSBkaXJlY3QgbWFpbiBwYXRoIGRlcGVuZGVuY3kgdGhhdCBpcyBub3QgYSBjaGlsZCBvZiB0aGUgcHJvamVjdAovLy8gZGlyZWN0b3J5IGFuZCBoYXMgYSBkaWZmZXJlbnQgcGFja2FnZSBuYW1lIHRoYW4gdGhlIGRpcmVjdG9yeSBuYW1lLgovLy8gKiBBIGRpcmVjdCBtYWluIGRlcGVuZGVuY3kgdGhhdCBpcyBob3N0ZWQuCi8vLyAqIEEgZGlyZWN0IGRldiBtYWluIGRlcGVuZGVuY3kgdGhhdCBpcyBob3N0ZWQuCi8vLyAqIEEgZGlyZWN0IG92ZXJyaWRkZW4gZGVwZW5kZW5jeSBmcm9tIGdpdC4KY29uc3QgZm9vUGF0aCA9ICcnJwpuYW1lOiBfCmRlcGVuZGVuY2llczoKICBmb286CiAgICBwYXRoOiAuLi8uLi9mb28KICBmb28yOgogICAgcGF0aDogLi4vLi4vZm9vMgogIGRpcmVjdF9tYWluOiBeMC4xLjAtZGV2LjUwCmRldl9kZXBlbmRlbmNpZXM6CiAgdGVzdDogXjEuMC4wCmRlcGVuZGVuY3lfb3ZlcnJpZGVzOgogIGRpcmVjdF9vdmVycmlkZGVuOgogICAgZ2l0OgogICAgICB1cmw6IGh0dHBzOi8vZ2l0aHViLmNvbS9hbGVzdGlhZ28vbWFzb24KICAgICAgcGF0aDogcGFja2FnZXMvbWFzb24KICAgICAgcmVmOiA3MmMzMDZhOGQ4YWJmMzA2YjVkMDI0Zjk1YWFjMjliYTVmZDk2NTc3CicnJzsKCi8vLyBBbiBhcnRpZmljaWFsbHkgY3JhZnRlZCBgcHVic3BlYy55YW1sYCBmaWxlIHdpdGg6Ci8vLwovLy8gKiBBIGRpcmVjdCBtYWluIHBhdGggZGVwZW5kZW5jeSB0aGF0IGlzIG5vdCBhIGNoaWxkIG9mIHRoZSBwcm9qZWN0Ci8vLyBkaXJlY3RvcnkuCi8vLyAqIEEgZGlyZWN0IG1haW4gcGF0aCBkZXBlbmRlbmN5IHRoYXQgaXMgYSBjaGlsZCBvZiB0aGUgcHJvamVjdCBkaXJlY3RvcnkuCi8vLyAqIEEgZGlyZWN0IG1haW4gZGVwZW5kZW5jeSB0aGF0IGlzIGhvc3RlZC4KLy8vICogQSBkaXJlY3QgZGV2IG1haW4gZGVwZW5kZW5jeSB0aGF0IGlzIGhvc3RlZC4KY29uc3QgZm9vUGF0aFdpdGhJbnRlcm5hbERlcGVuZGVuY3kgPSAnJycKbmFtZTogXwpkZXBlbmRlbmNpZXM6CiAgZm9vOgogICAgcGF0aDogLi4vLi4vZm9vCiAgYmFyOgogICAgcGF0aDogcGFja2FnZXMvYmFyCiAgbWFzb246IF4wLjEuMC1kZXYuNTAKZGV2X2RlcGVuZGVuY2llczoKICB0ZXN0OiBeMS4wLjAKJycnOwoKLy8vIEFuIGFydGlmaWNpYWxseSBjcmFmdGVkIGBwdWJzcGVjLnlhbWxgIGZpbGUgd2l0aDoKLy8vCi8vLyAqIEEgZGlyZWN0IG1haW4gZGVwZW5kZW5jeSB0aGF0IGlzIGhvc3RlZC4KLy8vICogQSBkaXJlY3QgZGV2IG1haW4gZGVwZW5kZW5jeSB0aGF0IGlzIGhvc3RlZC4KY29uc3Qgbm9QYXRoRGVwZW5kZW5jaWVzID0gJycnCm5hbWU6IF8KZGVwZW5kZW5jaWVzOgogIG1hc29uOiBeMC4xLjAtZGV2LjUwCmRldl9kZXBlbmRlbmNpZXM6CiAgdGVzdDogXjEuMC4wCicnJzsKCi8vLyBBbiBhcnRpZmljaWFsbHkgY3JhZnRlZCBgcHVic3BlYy55YW1sYCBmaWxlIHdpdGg6Ci8vLwovLy8gKiBBIGRpcmVjdCBtYWluIHBhdGggZGVwZW5kZW5jeSB0aGF0IGlzIGEgY2hpbGQgb2YgdGhlIHByb2plY3QgZGlyZWN0b3J5LgovLy8gKiBEYXJ0IHdvcmtzcGFjZXMgZW5hYmxlZApjb25zdCB3b3Jrc3BhY2VSb290ID0gJycnCm5hbWU6IF8KZGVwZW5kZW5jaWVzOgogIHNlcnZlcjoKICAgIHBhdGg6IHBhY2thZ2VzL3NlcnZlciAgCndvcmtzcGFjZToKICAtIHBhY2thZ2VzL3NlcnZlcgonJyc7CgovLy8gQW4gYXJ0aWZpY2lhbGx5IGNyYWZ0ZWQgYHB1YnNwZWMueWFtbGAgZmlsZSB3aXRoOgovLy8KLy8vICogRGFydCB3b3Jrc3BhY2VzIGVuYWJsZWQKY29uc3Qgd29ya3NwYWNlQ2hpbGQgPSAnJycKbmFtZTogc2VydmVyCnJlc29sdXRpb246IHdvcmtzcGFjZQonJyc7Cg==", + "type": "text" + }, + { + "path": "test/src/copy_workspace_pubspec_lock_test.dart", + "data": + "aW1wb3J0ICdkYXJ0OmlvJzsKCmltcG9ydCAncGFja2FnZTpkYXJ0X2Zyb2dfcHJvZF9zZXJ2ZXJfaG9va3MvZGFydF9mcm9nX3Byb2Rfc2VydmVyX2hvb2tzLmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6bWFzb24vbWFzb24uZGFydCc7CmltcG9ydCAncGFja2FnZTptb2NrdGFpbC9tb2NrdGFpbC5kYXJ0JzsKaW1wb3J0ICdwYWNrYWdlOnBhdGgvcGF0aC5kYXJ0JyBhcyBwYXRoOwppbXBvcnQgJ3BhY2thZ2U6dGVzdC90ZXN0LmRhcnQnOwoKY2xhc3MgX01vY2tIb29rQ29udGV4dCBleHRlbmRzIE1vY2sgaW1wbGVtZW50cyBIb29rQ29udGV4dCB7fQoKY2xhc3MgX01vY2tMb2dnZXIgZXh0ZW5kcyBNb2NrIGltcGxlbWVudHMgTG9nZ2VyIHt9Cgp2b2lkIG1haW4oKSB7CiAgZ3JvdXAoJ2NvcHlXb3Jrc3BhY2VQdWJzcGVjTG9jaycsICgpIHsKICAgIGxhdGUgTGlzdDxpbnQ+IGV4aXRDYWxsczsKICAgIGxhdGUgSG9va0NvbnRleHQgY29udGV4dDsKICAgIGxhdGUgTG9nZ2VyIGxvZ2dlcjsKICAgIGxhdGUgRGlyZWN0b3J5IGJ1aWxkRGlyZWN0b3J5OwogICAgbGF0ZSBEaXJlY3Rvcnkgd29ya2luZ0RpcmVjdG9yeTsKCiAgICBzZXRVcCgoKSB7CiAgICAgIGV4aXRDYWxscyA9IFtdOwogICAgICBjb250ZXh0ID0gX01vY2tIb29rQ29udGV4dCgpOwogICAgICBsb2dnZXIgPSBfTW9ja0xvZ2dlcigpOwogICAgICBidWlsZERpcmVjdG9yeSA9IERpcmVjdG9yeS5zeXN0ZW1UZW1wLmNyZWF0ZVRlbXBTeW5jKCdidWlsZCcpOwogICAgICB3b3JraW5nRGlyZWN0b3J5ID0gRGlyZWN0b3J5LnN5c3RlbVRlbXAuY3JlYXRlVGVtcFN5bmMoJ3dvcmtpbmcnKTsKCiAgICAgIHdoZW4oKCkgPT4gY29udGV4dC5sb2dnZXIpLnRoZW5SZXR1cm4obG9nZ2VyKTsKCiAgICAgIGFkZFRlYXJEb3duKCgpIHsKICAgICAgICBidWlsZERpcmVjdG9yeS5kZWxldGUoKS5pZ25vcmUoKTsKICAgICAgICB3b3JraW5nRGlyZWN0b3J5LmRlbGV0ZSgpLmlnbm9yZSgpOwogICAgICB9KTsKICAgIH0pOwoKICAgIHRlc3QoJ2V4aXRzIHdpdGggZXJyb3Igd2hlbiB1bmFibGUgdG8gZGV0ZXJtaW5lIHRoZSB3b3Jrc3BhY2Ugcm9vdCcsICgpIHsKICAgICAgY29weVdvcmtzcGFjZVB1YnNwZWNMb2NrKAogICAgICAgIGNvbnRleHQsCiAgICAgICAgYnVpbGREaXJlY3Rvcnk6IGJ1aWxkRGlyZWN0b3J5LnBhdGgsCiAgICAgICAgd29ya2luZ0RpcmVjdG9yeTogd29ya2luZ0RpcmVjdG9yeS5wYXRoLAogICAgICAgIGV4aXQ6IGV4aXRDYWxscy5hZGQsCiAgICAgICk7CiAgICAgIGV4cGVjdChleGl0Q2FsbHMsIGVxdWFscyhbMV0pKTsKICAgICAgdmVyaWZ5KAogICAgICAgICgpID0+IGxvZ2dlci5lcnIoCiAgICAgICAgICAnVW5hYmxlIHRvIGRldGVybWluZSB3b3Jrc3BhY2Ugcm9vdCBmb3IgJHt3b3JraW5nRGlyZWN0b3J5LnBhdGh9JywKICAgICAgICApLAogICAgICApOwogICAgfSk7CgogICAgdGVzdCgnZXhpdHMgd2l0aCBlcnJvciB3aGVuIHVuYWJsZSB0byBwYXJzZSBwdWJzcGVjLnlhbWwnLCAoKSB7CiAgICAgIEZpbGUocGF0aC5qb2luKHdvcmtpbmdEaXJlY3RvcnkucGF0aCwgJ3B1YnNwZWMueWFtbCcpKQogICAgICAgICAgLndyaXRlQXNTdHJpbmdTeW5jKCdpbnZhbGlkIHB1YnNwZWMueWFtbCcpOwogICAgICBjb3B5V29ya3NwYWNlUHVic3BlY0xvY2soCiAgICAgICAgY29udGV4dCwKICAgICAgICBidWlsZERpcmVjdG9yeTogYnVpbGREaXJlY3RvcnkucGF0aCwKICAgICAgICB3b3JraW5nRGlyZWN0b3J5OiB3b3JraW5nRGlyZWN0b3J5LnBhdGgsCiAgICAgICAgZXhpdDogZXhpdENhbGxzLmFkZCwKICAgICAgKTsKICAgICAgZXhwZWN0KGV4aXRDYWxscywgZXF1YWxzKFsxXSkpOwogICAgICB2ZXJpZnkoCiAgICAgICAgKCkgPT4gbG9nZ2VyLmVycigKICAgICAgICAgICdVbmFibGUgdG8gZGV0ZXJtaW5lIHdvcmtzcGFjZSByb290IGZvciAke3dvcmtpbmdEaXJlY3RvcnkucGF0aH0nLAogICAgICAgICksCiAgICAgICk7CiAgICB9KTsKCiAgICB0ZXN0KCdkb2VzIG5vdGhpbmcgd2hlbiBwdWJzcGVjLmxvY2sgZG9lcyBub3QgZXhpc3QgaW4gd29ya3NwYWNlIHJvb3QnLCAoKSB7CiAgICAgIEZpbGUocGF0aC5qb2luKHdvcmtpbmdEaXJlY3RvcnkucGF0aCwgJ3B1YnNwZWMueWFtbCcpKQogICAgICAgICAgLndyaXRlQXNTdHJpbmdTeW5jKCcnJwpuYW1lOiBfCnZlcnNpb246IDAuMC4wCmVudmlyb25tZW50OgogIHNkazogXjMuOC4wCndvcmtzcGFjZToKICAtIHBhY2thZ2VzL2hlbGxvX3dvcmxkCicnJyk7CiAgICAgIGNvcHlXb3Jrc3BhY2VQdWJzcGVjTG9jaygKICAgICAgICBjb250ZXh0LAogICAgICAgIGJ1aWxkRGlyZWN0b3J5OiBidWlsZERpcmVjdG9yeS5wYXRoLAogICAgICAgIHdvcmtpbmdEaXJlY3Rvcnk6IHdvcmtpbmdEaXJlY3RvcnkucGF0aCwKICAgICAgICBleGl0OiBleGl0Q2FsbHMuYWRkLAogICAgICApOwogICAgICBleHBlY3QoZXhpdENhbGxzLCBpc0VtcHR5KTsKICAgICAgdmVyaWZ5TmV2ZXIoKCkgPT4gbG9nZ2VyLmVycihhbnkoKSkpOwogICAgICBleHBlY3QoYnVpbGREaXJlY3RvcnkubGlzdFN5bmMoKSwgaXNFbXB0eSk7CiAgICB9KTsKCiAgICB0ZXN0KCdleGl0cyB3aXRoIGVycm9yIHdoZW4gdW5hYmxlIHRvIGNvcHkgbG9ja2ZpbGUnLCAoKSB7CiAgICAgIGNvbnN0IHB1YnNwZWNMb2NrQ29udGVudHMgPSAnJycKIyBHZW5lcmF0ZWQgYnkgcHViCiMgU2VlIGh0dHBzOi8vZGFydC5kZXYvdG9vbHMvcHViL2dsb3NzYXJ5I2xvY2tmaWxlCnBhY2thZ2VzOgonJyc7CiAgICAgIEZpbGUocGF0aC5qb2luKHdvcmtpbmdEaXJlY3RvcnkucGF0aCwgJ3B1YnNwZWMueWFtbCcpKQogICAgICAgICAgLndyaXRlQXNTdHJpbmdTeW5jKCcnJwpuYW1lOiBfCnZlcnNpb246IDAuMC4wCmVudmlyb25tZW50OgogIHNkazogXjMuOC4wCndvcmtzcGFjZToKICAtIHBhY2thZ2VzL2hlbGxvX3dvcmxkCicnJyk7CiAgICAgIGZpbmFsIGZpbGUgPSBGaWxlKHBhdGguam9pbih3b3JraW5nRGlyZWN0b3J5LnBhdGgsICdwdWJzcGVjLmxvY2snKSkKICAgICAgICAuLndyaXRlQXNTdHJpbmdTeW5jKHB1YnNwZWNMb2NrQ29udGVudHMpOwogICAgICBQcm9jZXNzLnJ1blN5bmMoJ2NobW9kJywgWycwMDAnLCBmaWxlLnBhdGhdKTsKICAgICAgY29weVdvcmtzcGFjZVB1YnNwZWNMb2NrKAogICAgICAgIGNvbnRleHQsCiAgICAgICAgYnVpbGREaXJlY3Rvcnk6IGJ1aWxkRGlyZWN0b3J5LnBhdGgsCiAgICAgICAgd29ya2luZ0RpcmVjdG9yeTogd29ya2luZ0RpcmVjdG9yeS5wYXRoLAogICAgICAgIGV4aXQ6IGV4aXRDYWxscy5hZGQsCiAgICAgICk7CiAgICAgIGV4cGVjdChleGl0Q2FsbHMsIGVxdWFscyhbMV0pKTsKICAgICAgdmVyaWZ5KAogICAgICAgICgpID0+IGxvZ2dlci5lcnIoYW55KHRoYXQ6IGNvbnRhaW5zKCdQZXJtaXNzaW9uIGRlbmllZCcpKSksCiAgICAgICk7CiAgICB9KTsKCiAgICB0ZXN0KCdjb3BpZXMgcHVic3BlYy5sb2NrIHRvIGJ1aWxkIGRpcmVjdG9yeSB3aGVuIGZvdW5kJywgKCkgewogICAgICBjb25zdCBwdWJzcGVjTG9ja0NvbnRlbnRzID0gJycnCiMgR2VuZXJhdGVkIGJ5IHB1YgojIFNlZSBodHRwczovL2RhcnQuZGV2L3Rvb2xzL3B1Yi9nbG9zc2FyeSNsb2NrZmlsZQpwYWNrYWdlczoKJycnOwogICAgICBGaWxlKHBhdGguam9pbih3b3JraW5nRGlyZWN0b3J5LnBhdGgsICdwdWJzcGVjLnlhbWwnKSkKICAgICAgICAgIC53cml0ZUFzU3RyaW5nU3luYygnJycKbmFtZTogXwp2ZXJzaW9uOiAwLjAuMAplbnZpcm9ubWVudDoKICBzZGs6IF4zLjguMAp3b3Jrc3BhY2U6CiAgLSBwYWNrYWdlcy9oZWxsb193b3JsZAonJycpOwogICAgICBGaWxlKHBhdGguam9pbih3b3JraW5nRGlyZWN0b3J5LnBhdGgsICdwdWJzcGVjLmxvY2snKSkKICAgICAgICAgIC53cml0ZUFzU3RyaW5nU3luYyhwdWJzcGVjTG9ja0NvbnRlbnRzKTsKICAgICAgY29weVdvcmtzcGFjZVB1YnNwZWNMb2NrKAogICAgICAgIGNvbnRleHQsCiAgICAgICAgYnVpbGREaXJlY3Rvcnk6IGJ1aWxkRGlyZWN0b3J5LnBhdGgsCiAgICAgICAgd29ya2luZ0RpcmVjdG9yeTogd29ya2luZ0RpcmVjdG9yeS5wYXRoLAogICAgICAgIGV4aXQ6IGV4aXRDYWxscy5hZGQsCiAgICAgICk7CiAgICAgIGV4cGVjdChleGl0Q2FsbHMsIGlzRW1wdHkpOwogICAgICB2ZXJpZnlOZXZlcigoKSA9PiBsb2dnZXIuZXJyKGFueSgpKSk7CiAgICAgIGZpbmFsIGJ1aWxkRGlyZWN0b3J5Q29udGVudHMgPSBidWlsZERpcmVjdG9yeS5saXN0U3luYygpOwogICAgICBleHBlY3QoYnVpbGREaXJlY3RvcnlDb250ZW50cywgaGFzTGVuZ3RoKDEpKTsKICAgICAgZXhwZWN0KAogICAgICAgIGJ1aWxkRGlyZWN0b3J5Q29udGVudHMuZmlyc3QsCiAgICAgICAgaXNBPEZpbGU+KCkuaGF2aW5nKAogICAgICAgICAgKGYpID0+IHBhdGguYmFzZW5hbWUoZi5wYXRoKSwKICAgICAgICAgICduYW1lJywKICAgICAgICAgICdwdWJzcGVjLmxvY2snLAogICAgICAgICksCiAgICAgICk7CiAgICAgIGV4cGVjdCgKICAgICAgICAoYnVpbGREaXJlY3RvcnlDb250ZW50cy5maXJzdCBhcyBGaWxlKS5yZWFkQXNTdHJpbmdTeW5jKCksCiAgICAgICAgZXF1YWxzKHB1YnNwZWNMb2NrQ29udGVudHMpLAogICAgICApOwogICAgfSk7CiAgfSk7Cn0K", "type": "text" }, { @@ -118,7 +280,7 @@ final dartFrogProdServerBundle = MasonBundle.fromJson({ { "path": "test/src/create_external_packages_folder_test.dart", "data": - "aW1wb3J0ICdkYXJ0OmlvJzsKCmltcG9ydCAncGFja2FnZTpkYXJ0X2Zyb2dfcHJvZF9zZXJ2ZXJfaG9va3MvZGFydF9mcm9nX3Byb2Rfc2VydmVyX2hvb2tzLmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6cGF0aC9wYXRoLmRhcnQnIGFzIHBhdGg7CmltcG9ydCAncGFja2FnZTp0ZXN0L3Rlc3QuZGFydCc7CgppbXBvcnQgJy4uL3B1YnNwZWNfbG9ja3MuZGFydCc7Cgp2b2lkIG1haW4oKSB7CiAgZ3JvdXAoJ2NyZWF0ZUV4dGVybmFsUGFja2FnZXNGb2xkZXInLCAoKSB7CiAgICB0ZXN0KAogICAgICAnYnVuZGxlcyBleHRlcm5hbCBkZXBlbmRlbmNpZXMgd2l0aCBleHRlcm5hbCBkZXBlbmRlbmNpZXMnLAogICAgICAoKSBhc3luYyB7CiAgICAgICAgZmluYWwgcHJvamVjdERpcmVjdG9yeSA9IERpcmVjdG9yeS5zeXN0ZW1UZW1wLmNyZWF0ZVRlbXBTeW5jKCk7CiAgICAgICAgRmlsZShwYXRoLmpvaW4ocHJvamVjdERpcmVjdG9yeS5wYXRoLCAncHVic3BlYy5sb2NrJykpCiAgICAgICAgICAgIC53cml0ZUFzU3RyaW5nU3luYyhmb29QYXRoKTsKICAgICAgICBmaW5hbCBjb3B5Q2FsbHMgPSA8U3RyaW5nPltdOwoKICAgICAgICBhd2FpdCBjcmVhdGVFeHRlcm5hbFBhY2thZ2VzRm9sZGVyKAogICAgICAgICAgcHJvamVjdERpcmVjdG9yeTogcHJvamVjdERpcmVjdG9yeSwKICAgICAgICAgIGJ1aWxkRGlyZWN0b3J5OiBEaXJlY3RvcnkocGF0aC5qb2luKHByb2plY3REaXJlY3RvcnkucGF0aCwgJ2J1aWxkJykpLAogICAgICAgICAgY29weVBhdGg6IChmcm9tLCB0bykgewogICAgICAgICAgICBjb3B5Q2FsbHMuYWRkKCckZnJvbSAtPiAkdG8nKTsKICAgICAgICAgICAgcmV0dXJuIEZ1dHVyZS52YWx1ZSgpOwogICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICBmaW5hbCBmb29QYWNrYWdlRGlyZWN0b3J5ID0KICAgICAgICAgICAgcGF0aC5qb2luKHByb2plY3REaXJlY3RvcnkucGF0aCwgJy4uLy4uL2ZvbycpOwogICAgICAgIGZpbmFsIGZvb1BhY2thZ2VEaXJlY3RvcnlUYXJnZXQgPSBwYXRoLmpvaW4oCiAgICAgICAgICBwcm9qZWN0RGlyZWN0b3J5LnBhdGgsCiAgICAgICAgICAnYnVpbGQnLAogICAgICAgICAgJy5kYXJ0X2Zyb2dfcGF0aF9kZXBlbmRlbmNpZXMnLAogICAgICAgICAgJ2ZvbycsCiAgICAgICAgKTsKCiAgICAgICAgZmluYWwgc2Vjb25kRm9vUGFja2FnZURpcmVjdG9yeSA9CiAgICAgICAgICAgIHBhdGguam9pbihwcm9qZWN0RGlyZWN0b3J5LnBhdGgsICcuLi8uLi9mb28yJyk7CiAgICAgICAgZmluYWwgc2Vjb25kRm9vUGFja2FnZURpcmVjdG9yeVRhcmdldCA9IHBhdGguam9pbigKICAgICAgICAgIHByb2plY3REaXJlY3RvcnkucGF0aCwKICAgICAgICAgICdidWlsZCcsCiAgICAgICAgICAnLmRhcnRfZnJvZ19wYXRoX2RlcGVuZGVuY2llcycsCiAgICAgICAgICAnc2Vjb25kX2ZvbycsCiAgICAgICAgKTsKICAgICAgICBleHBlY3QoY29weUNhbGxzLCBbCiAgICAgICAgICAnJGZvb1BhY2thZ2VEaXJlY3RvcnkgLT4gJGZvb1BhY2thZ2VEaXJlY3RvcnlUYXJnZXQnLAogICAgICAgICAgJyRzZWNvbmRGb29QYWNrYWdlRGlyZWN0b3J5IC0+ICRzZWNvbmRGb29QYWNrYWdlRGlyZWN0b3J5VGFyZ2V0JywKICAgICAgICBdKTsKICAgICAgfSwKICAgICk7CgogICAgdGVzdCgKICAgICAgImRvbid0IGJ1bmRsZSBpbnRlcm5hbCBwYXRoIGRlcGVuZGVuY2llcyIsCiAgICAgICgpIGFzeW5jIHsKICAgICAgICBmaW5hbCBwcm9qZWN0RGlyZWN0b3J5ID0gRGlyZWN0b3J5LnN5c3RlbVRlbXAuY3JlYXRlVGVtcFN5bmMoKTsKICAgICAgICBGaWxlKHBhdGguam9pbihwcm9qZWN0RGlyZWN0b3J5LnBhdGgsICdwdWJzcGVjLmxvY2snKSkKICAgICAgICAgICAgLndyaXRlQXNTdHJpbmdTeW5jKGZvb1BhdGhXaXRoSW50ZXJuYWxEZXBlbmRlbmN5KTsKICAgICAgICBmaW5hbCBjb3B5Q2FsbHMgPSA8U3RyaW5nPltdOwoKICAgICAgICBhd2FpdCBjcmVhdGVFeHRlcm5hbFBhY2thZ2VzRm9sZGVyKAogICAgICAgICAgcHJvamVjdERpcmVjdG9yeTogcHJvamVjdERpcmVjdG9yeSwKICAgICAgICAgIGJ1aWxkRGlyZWN0b3J5OiBEaXJlY3RvcnkocGF0aC5qb2luKHByb2plY3REaXJlY3RvcnkucGF0aCwgJ2J1aWxkJykpLAogICAgICAgICAgY29weVBhdGg6IChmcm9tLCB0bykgewogICAgICAgICAgICBjb3B5Q2FsbHMuYWRkKCckZnJvbSAtPiAkdG8nKTsKICAgICAgICAgICAgcmV0dXJuIEZ1dHVyZS52YWx1ZSgpOwogICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICBmaW5hbCBmcm9tID0gcGF0aC5qb2luKHByb2plY3REaXJlY3RvcnkucGF0aCwgJy4uLy4uL2ZvbycpOwogICAgICAgIGZpbmFsIHRvID0gcGF0aC5qb2luKAogICAgICAgICAgcHJvamVjdERpcmVjdG9yeS5wYXRoLAogICAgICAgICAgJ2J1aWxkJywKICAgICAgICAgICcuZGFydF9mcm9nX3BhdGhfZGVwZW5kZW5jaWVzJywKICAgICAgICAgICdmb28nLAogICAgICAgICk7CiAgICAgICAgZXhwZWN0KGNvcHlDYWxscywgWyckZnJvbSAtPiAkdG8nXSk7CiAgICAgIH0sCiAgICApOwogIH0pOwp9Cg==", + "aW1wb3J0ICdkYXJ0OmlvJzsKCmltcG9ydCAncGFja2FnZTpkYXJ0X2Zyb2dfcHJvZF9zZXJ2ZXJfaG9va3MvZGFydF9mcm9nX3Byb2Rfc2VydmVyX2hvb2tzLmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6cGF0aC9wYXRoLmRhcnQnIGFzIHBhdGg7CmltcG9ydCAncGFja2FnZTp0ZXN0L3Rlc3QuZGFydCc7CgppbXBvcnQgJy4uL3B1YnNwZWNzLmRhcnQnOwoKdm9pZCBtYWluKCkgewogIGdyb3VwKCdjcmVhdGVFeHRlcm5hbFBhY2thZ2VzRm9sZGVyJywgKCkgewogICAgdGVzdCgnYnVuZGxlcyBleHRlcm5hbCBkZXBlbmRlbmNpZXMgd2l0aCBleHRlcm5hbCBkZXBlbmRlbmNpZXMnLCAoKSBhc3luYyB7CiAgICAgIGZpbmFsIHByb2plY3REaXJlY3RvcnkgPSBEaXJlY3Rvcnkuc3lzdGVtVGVtcC5jcmVhdGVUZW1wU3luYygpOwogICAgICBGaWxlKHBhdGguam9pbihwcm9qZWN0RGlyZWN0b3J5LnBhdGgsICdwdWJzcGVjLnlhbWwnKSkKICAgICAgICAgIC53cml0ZUFzU3RyaW5nU3luYyhmb29QYXRoKTsKICAgICAgZmluYWwgY29weUNhbGxzID0gPFN0cmluZz5bXTsKCiAgICAgIGF3YWl0IGNyZWF0ZUV4dGVybmFsUGFja2FnZXNGb2xkZXIoCiAgICAgICAgcHJvamVjdERpcmVjdG9yeTogcHJvamVjdERpcmVjdG9yeSwKICAgICAgICBidWlsZERpcmVjdG9yeTogRGlyZWN0b3J5KHBhdGguam9pbihwcm9qZWN0RGlyZWN0b3J5LnBhdGgsICdidWlsZCcpKSwKICAgICAgICBjb3B5UGF0aDogKGZyb20sIHRvKSBhc3luYyA9PiBjb3B5Q2FsbHMuYWRkKCckZnJvbSAtPiAkdG8nKSwKICAgICAgKTsKCiAgICAgIGZpbmFsIGZvb1BhY2thZ2VEaXJlY3RvcnkgPSBwYXRoLmpvaW4ocHJvamVjdERpcmVjdG9yeS5wYXRoLCAnLi4vLi4vZm9vJyk7CiAgICAgIGZpbmFsIGZvb1BhY2thZ2VEaXJlY3RvcnlUYXJnZXQgPSBwYXRoLmpvaW4oCiAgICAgICAgcHJvamVjdERpcmVjdG9yeS5wYXRoLAogICAgICAgICdidWlsZCcsCiAgICAgICAgJy5kYXJ0X2Zyb2dfcGF0aF9kZXBlbmRlbmNpZXMnLAogICAgICAgICdmb28nLAogICAgICApOwoKICAgICAgZmluYWwgZm9vMlBhY2thZ2VEaXJlY3RvcnkgPQogICAgICAgICAgcGF0aC5qb2luKHByb2plY3REaXJlY3RvcnkucGF0aCwgJy4uLy4uL2ZvbzInKTsKICAgICAgZmluYWwgZm9vMlBhY2thZ2VEaXJlY3RvcnlUYXJnZXQgPSBwYXRoLmpvaW4oCiAgICAgICAgcHJvamVjdERpcmVjdG9yeS5wYXRoLAogICAgICAgICdidWlsZCcsCiAgICAgICAgJy5kYXJ0X2Zyb2dfcGF0aF9kZXBlbmRlbmNpZXMnLAogICAgICAgICdmb28yJywKICAgICAgKTsKCiAgICAgIGV4cGVjdChjb3B5Q2FsbHMsIFsKICAgICAgICAnJGZvb1BhY2thZ2VEaXJlY3RvcnkgLT4gJGZvb1BhY2thZ2VEaXJlY3RvcnlUYXJnZXQnLAogICAgICAgICckZm9vMlBhY2thZ2VEaXJlY3RvcnkgLT4gJGZvbzJQYWNrYWdlRGlyZWN0b3J5VGFyZ2V0JywKICAgICAgXSk7CiAgICB9KTsKCiAgICB0ZXN0KCdkb2VzIG5vdCBidW5kbGUgaW50ZXJuYWwgcGF0aCBkZXBlbmRlbmNpZXMnLCAoKSBhc3luYyB7CiAgICAgIGZpbmFsIHByb2plY3REaXJlY3RvcnkgPSBEaXJlY3Rvcnkuc3lzdGVtVGVtcC5jcmVhdGVUZW1wU3luYygpOwogICAgICBGaWxlKAogICAgICAgIHBhdGguam9pbihwcm9qZWN0RGlyZWN0b3J5LnBhdGgsICdwdWJzcGVjLnlhbWwnKSwKICAgICAgKS53cml0ZUFzU3RyaW5nU3luYyhmb29QYXRoV2l0aEludGVybmFsRGVwZW5kZW5jeSk7CiAgICAgIGZpbmFsIGNvcHlDYWxscyA9IDxTdHJpbmc+W107CgogICAgICBhd2FpdCBjcmVhdGVFeHRlcm5hbFBhY2thZ2VzRm9sZGVyKAogICAgICAgIHByb2plY3REaXJlY3Rvcnk6IHByb2plY3REaXJlY3RvcnksCiAgICAgICAgYnVpbGREaXJlY3Rvcnk6IERpcmVjdG9yeShwYXRoLmpvaW4ocHJvamVjdERpcmVjdG9yeS5wYXRoLCAnYnVpbGQnKSksCiAgICAgICAgY29weVBhdGg6IChmcm9tLCB0bykgYXN5bmMgPT4gY29weUNhbGxzLmFkZCgnJGZyb20gLT4gJHRvJyksCiAgICAgICk7CgogICAgICBmaW5hbCBmcm9tID0gcGF0aC5qb2luKHByb2plY3REaXJlY3RvcnkucGF0aCwgJy4uLy4uL2ZvbycpOwogICAgICBmaW5hbCB0byA9IHBhdGguam9pbigKICAgICAgICBwcm9qZWN0RGlyZWN0b3J5LnBhdGgsCiAgICAgICAgJ2J1aWxkJywKICAgICAgICAnLmRhcnRfZnJvZ19wYXRoX2RlcGVuZGVuY2llcycsCiAgICAgICAgJ2ZvbycsCiAgICAgICk7CiAgICAgIGV4cGVjdChjb3B5Q2FsbHMsIFsnJGZyb20gLT4gJHRvJ10pOwogICAgfSk7CiAgfSk7Cn0K", "type": "text" }, { @@ -127,6 +289,12 @@ final dartFrogProdServerBundle = MasonBundle.fromJson({ "aW1wb3J0ICdkYXJ0OmlvJzsKCmltcG9ydCAncGFja2FnZTpkYXJ0X2Zyb2dfcHJvZF9zZXJ2ZXJfaG9va3MvZGFydF9mcm9nX3Byb2Rfc2VydmVyX2hvb2tzLmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6bWFzb24vbWFzb24uZGFydCc7CmltcG9ydCAncGFja2FnZTptb2NrdGFpbC9tb2NrdGFpbC5kYXJ0JzsKaW1wb3J0ICdwYWNrYWdlOnRlc3QvdGVzdC5kYXJ0JzsKCmNsYXNzIF9GYWtlSG9va0NvbnRleHQgZXh0ZW5kcyBGYWtlIGltcGxlbWVudHMgSG9va0NvbnRleHQgewogIF9GYWtlSG9va0NvbnRleHQoe0xvZ2dlcj8gbG9nZ2VyfSkgOiBfbG9nZ2VyID0gbG9nZ2VyID8/IF9Nb2NrTG9nZ2VyKCk7CgogIGZpbmFsIExvZ2dlciBfbG9nZ2VyOwoKICB2YXIgX3ZhcnMgPSA8U3RyaW5nLCBkeW5hbWljPnt9OwoKICBAb3ZlcnJpZGUKICBNYXA8U3RyaW5nLCBkeW5hbWljPiBnZXQgdmFycyA9PiBfdmFyczsKCiAgQG92ZXJyaWRlCiAgc2V0IHZhcnMoTWFwPFN0cmluZywgZHluYW1pYz4gdmFsdWUpID0+IF92YXJzID0gdmFsdWU7CgogIEBvdmVycmlkZQogIExvZ2dlciBnZXQgbG9nZ2VyID0+IF9sb2dnZXI7Cn0KCmNsYXNzIF9Nb2NrTG9nZ2VyIGV4dGVuZHMgTW9jayBpbXBsZW1lbnRzIExvZ2dlciB7fQoKY2xhc3MgX01vY2tQcm9ncmVzcyBleHRlbmRzIE1vY2sgaW1wbGVtZW50cyBQcm9ncmVzcyB7fQoKdm9pZCBtYWluKCkgewogIGdyb3VwKCdkYXJ0UHViR2V0JywgKCkgewogICAgbGF0ZSBIb29rQ29udGV4dCBjb250ZXh0OwogICAgbGF0ZSBMb2dnZXIgbG9nZ2VyOwoKICAgIGNvbnN0IHByb2Nlc3NJZCA9IDQyOwogICAgZmluYWwgcHJvY2Vzc1Jlc3VsdCA9IFByb2Nlc3NSZXN1bHQoCiAgICAgIHByb2Nlc3NJZCwKICAgICAgRXhpdENvZGUuc3VjY2Vzcy5jb2RlLAogICAgICAnJywKICAgICAgJycsCiAgICApOwoKICAgIHNldFVwKCgpIHsKICAgICAgbG9nZ2VyID0gX01vY2tMb2dnZXIoKTsKICAgICAgY29udGV4dCA9IF9GYWtlSG9va0NvbnRleHQobG9nZ2VyOiBsb2dnZXIpOwoKICAgICAgd2hlbigoKSA9PiBsb2dnZXIucHJvZ3Jlc3MoYW55KCkpKS50aGVuUmV0dXJuKF9Nb2NrUHJvZ3Jlc3MoKSk7CiAgICB9KTsKCiAgICB0ZXN0KCdjb21wbGV0ZXMgd2hlbiBwcm9jZXNzIHN1Y2NlZWRzJywgKCkgYXN5bmMgewogICAgICBmaW5hbCBleGl0Q2FsbHMgPSA8aW50PltdOwoKICAgICAgYXdhaXQgZGFydFB1YkdldCgKICAgICAgICBjb250ZXh0LAogICAgICAgIHdvcmtpbmdEaXJlY3Rvcnk6ICcuJywKICAgICAgICBydW5Qcm9jZXNzOiAoCiAgICAgICAgICBleGVjdXRhYmxlLAogICAgICAgICAgYXJncywgewogICAgICAgICAgU3RyaW5nPyB3b3JraW5nRGlyZWN0b3J5LAogICAgICAgICAgYm9vbD8gcnVuSW5TaGVsbCwKICAgICAgICB9KSBhc3luYyB7CiAgICAgICAgICBleHBlY3QoZXhlY3V0YWJsZSwgZXF1YWxzKCdkYXJ0JykpOwogICAgICAgICAgZXhwZWN0KGFyZ3MsIGVxdWFscyhbJ3B1YicsICdnZXQnXSkpOwogICAgICAgICAgZXhwZWN0KHdvcmtpbmdEaXJlY3RvcnksIGVxdWFscygnLicpKTsKICAgICAgICAgIGV4cGVjdChydW5JblNoZWxsLCBpc1RydWUpOwogICAgICAgICAgcmV0dXJuIHByb2Nlc3NSZXN1bHQ7CiAgICAgICAgfSwKICAgICAgICBleGl0OiBleGl0Q2FsbHMuYWRkLAogICAgICApOwogICAgICBleHBlY3QoZXhpdENhbGxzLCBpc0VtcHR5KTsKICAgICAgdmVyaWZ5TmV2ZXIoKCkgPT4gbG9nZ2VyLmVycihhbnkoKSkpOwogICAgfSk7CgogICAgdGVzdCgnZXhpdHMgd2hlbiBwcm9jZXNzIGZhaWxzJywgKCkgYXN5bmMgewogICAgICBjb25zdCBlcnJvciA9ICdvb3BzIHNvbWV0aGluZyB3ZW50IHdyb25nJzsKICAgICAgZmluYWwgZXhpdENhbGxzID0gPGludD5bXTsKCiAgICAgIGZpbmFsIHByb2Nlc3NSZXN1bHQgPSBQcm9jZXNzUmVzdWx0KAogICAgICAgIHByb2Nlc3NJZCwKICAgICAgICBFeGl0Q29kZS5zb2Z0d2FyZS5jb2RlLAogICAgICAgICcnLAogICAgICAgIGVycm9yLAogICAgICApOwoKICAgICAgYXdhaXQgZGFydFB1YkdldCgKICAgICAgICBjb250ZXh0LAogICAgICAgIHdvcmtpbmdEaXJlY3Rvcnk6ICcuJywKICAgICAgICBydW5Qcm9jZXNzOiAoCiAgICAgICAgICBleGVjdXRhYmxlLAogICAgICAgICAgYXJncywgewogICAgICAgICAgU3RyaW5nPyB3b3JraW5nRGlyZWN0b3J5LAogICAgICAgICAgYm9vbD8gcnVuSW5TaGVsbCwKICAgICAgICB9KSBhc3luYyB7CiAgICAgICAgICByZXR1cm4gcHJvY2Vzc1Jlc3VsdDsKICAgICAgICB9LAogICAgICAgIGV4aXQ6IGV4aXRDYWxscy5hZGQsCiAgICAgICk7CiAgICAgIGV4cGVjdChleGl0Q2FsbHMsIGVxdWFscyhbRXhpdENvZGUuc29mdHdhcmUuY29kZV0pKTsKICAgICAgdmVyaWZ5KCgpID0+IGxvZ2dlci5lcnIoZXJyb3IpKS5jYWxsZWQoMSk7CiAgICB9KTsKCiAgICB0ZXN0KCdleGl0cyB3aGVuIFByb2Nlc3NFeGNlcHRpb24gb2NjdXJzJywgKCkgYXN5bmMgewogICAgICBjb25zdCBlcnJvciA9ICdvb3BzIHNvbWV0aGluZyB3ZW50IHdyb25nJzsKICAgICAgZmluYWwgZXhpdENhbGxzID0gPGludD5bXTsKICAgICAgYXdhaXQgZGFydFB1YkdldCgKICAgICAgICBjb250ZXh0LAogICAgICAgIHdvcmtpbmdEaXJlY3Rvcnk6ICcuJywKICAgICAgICBydW5Qcm9jZXNzOiAoCiAgICAgICAgICBleGVjdXRhYmxlLAogICAgICAgICAgYXJncywgewogICAgICAgICAgU3RyaW5nPyB3b3JraW5nRGlyZWN0b3J5LAogICAgICAgICAgYm9vbD8gcnVuSW5TaGVsbCwKICAgICAgICB9KSBhc3luYyB7CiAgICAgICAgICB0aHJvdyBQcm9jZXNzRXhjZXB0aW9uKAogICAgICAgICAgICAnZGFydCcsCiAgICAgICAgICAgIFsncHViJywgJ2dldCddLAogICAgICAgICAgICBlcnJvciwKICAgICAgICAgICAgRXhpdENvZGUuc29mdHdhcmUuY29kZSwKICAgICAgICAgICk7CiAgICAgICAgfSwKICAgICAgICBleGl0OiBleGl0Q2FsbHMuYWRkLAogICAgICApOwogICAgICBleHBlY3QoZXhpdENhbGxzLCBlcXVhbHMoW0V4aXRDb2RlLnNvZnR3YXJlLmNvZGVdKSk7CiAgICAgIHZlcmlmeSgoKSA9PiBsb2dnZXIuZXJyKGVycm9yKSkuY2FsbGVkKDEpOwogICAgfSk7CiAgfSk7Cn0K", "type": "text" }, + { + "path": "test/src/disable_workspace_resolution_test.dart", + "data": + "aW1wb3J0ICdkYXJ0OmlvJzsKCmltcG9ydCAncGFja2FnZTpkYXJ0X2Zyb2dfcHJvZF9zZXJ2ZXJfaG9va3MvZGFydF9mcm9nX3Byb2Rfc2VydmVyX2hvb2tzLmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6bWFzb24vbWFzb24uZGFydCc7CmltcG9ydCAncGFja2FnZTptb2NrdGFpbC9tb2NrdGFpbC5kYXJ0JzsKaW1wb3J0ICdwYWNrYWdlOnBhdGgvcGF0aC5kYXJ0JyBhcyBwYXRoOwppbXBvcnQgJ3BhY2thZ2U6dGVzdC90ZXN0LmRhcnQnOwoKY2xhc3MgX01vY2tIb29rQ29udGV4dCBleHRlbmRzIE1vY2sgaW1wbGVtZW50cyBIb29rQ29udGV4dCB7fQoKY2xhc3MgX01vY2tMb2dnZXIgZXh0ZW5kcyBNb2NrIGltcGxlbWVudHMgTG9nZ2VyIHt9Cgp2b2lkIG1haW4oKSB7CiAgZ3JvdXAoJ2Rpc2FibGVXb3Jrc3BhY2VSZXNvbHV0aW9uJywgKCkgewogICAgbGF0ZSBMaXN0PGludD4gZXhpdENhbGxzOwogICAgbGF0ZSBIb29rQ29udGV4dCBjb250ZXh0OwogICAgbGF0ZSBMb2dnZXIgbG9nZ2VyOwogICAgbGF0ZSBEaXJlY3RvcnkgYnVpbGREaXJlY3Rvcnk7CgogICAgc2V0VXAoKCkgewogICAgICBleGl0Q2FsbHMgPSBbXTsKICAgICAgY29udGV4dCA9IF9Nb2NrSG9va0NvbnRleHQoKTsKICAgICAgbG9nZ2VyID0gX01vY2tMb2dnZXIoKTsKICAgICAgYnVpbGREaXJlY3RvcnkgPSBEaXJlY3Rvcnkuc3lzdGVtVGVtcC5jcmVhdGVUZW1wU3luYygnYnVpbGQnKTsKCiAgICAgIHdoZW4oKCkgPT4gY29udGV4dC5sb2dnZXIpLnRoZW5SZXR1cm4obG9nZ2VyKTsKCiAgICAgIGFkZFRlYXJEb3duKCgpID0+IGJ1aWxkRGlyZWN0b3J5LmRlbGV0ZSgpLmlnbm9yZSgpKTsKICAgIH0pOwoKICAgIGdyb3VwKCd3aGVuIHB1YnNwZWNfb3ZlcnJpZGVzLnlhbWwgZG9lcyBub3QgZXhpc3QnLCAoKSB7CiAgICAgIHRlc3QoJ2FkZHMgcmVzb2x1dGlvbjogbnVsbCcsICgpIHsKICAgICAgICBkaXNhYmxlV29ya3NwYWNlUmVzb2x1dGlvbigKICAgICAgICAgIGNvbnRleHQsCiAgICAgICAgICBidWlsZERpcmVjdG9yeTogYnVpbGREaXJlY3RvcnkucGF0aCwKICAgICAgICAgIGV4aXQ6IGV4aXRDYWxscy5hZGQsCiAgICAgICAgKTsKICAgICAgICBmaW5hbCBidWlsZERpcmVjdG9yeUNvbnRlbnRzID0gYnVpbGREaXJlY3RvcnkubGlzdFN5bmMoKTsKICAgICAgICBleHBlY3QoYnVpbGREaXJlY3RvcnlDb250ZW50cywgaGFzTGVuZ3RoKDEpKTsKICAgICAgICBmaW5hbCBwdWJzcGVjT3ZlcnJpZGVzID0gYnVpbGREaXJlY3RvcnlDb250ZW50cy5maXJzdCBhcyBGaWxlOwogICAgICAgIGV4cGVjdChwdWJzcGVjT3ZlcnJpZGVzLnJlYWRBc1N0cmluZ1N5bmMoKSwgZXF1YWxzKCcnJwoKcmVzb2x1dGlvbjogbnVsbAonJycpKTsKICAgICAgfSk7CiAgICB9KTsKCiAgICBncm91cCgnd2hlbiBwdWJzcGVjX292ZXJyaWRlcy55YW1sIGV4aXN0cycsICgpIHsKICAgICAgY29uc3Qgb3JpZ2luYWxQdWJzcGVjT3ZlcnJpZGVzQ29udGVudCA9ICcnJwpkZXBlbmRlbmN5X292ZXJyaWRlczoKICBmb286CiAgICBwYXRoOiAuL3BhdGgvdG8vZm9vJycnOwoKICAgICAgc2V0VXAoKCkgewogICAgICAgIEZpbGUocGF0aC5qb2luKGJ1aWxkRGlyZWN0b3J5LnBhdGgsICdwdWJzcGVjX292ZXJyaWRlcy55YW1sJykpCiAgICAgICAgICAgIC53cml0ZUFzU3RyaW5nU3luYyhvcmlnaW5hbFB1YnNwZWNPdmVycmlkZXNDb250ZW50KTsKICAgICAgfSk7CgogICAgICB0ZXN0KCdhZGRzIHJlc29sdXRpb246IG51bGwnLCAoKSB7CiAgICAgICAgZGlzYWJsZVdvcmtzcGFjZVJlc29sdXRpb24oCiAgICAgICAgICBjb250ZXh0LAogICAgICAgICAgYnVpbGREaXJlY3Rvcnk6IGJ1aWxkRGlyZWN0b3J5LnBhdGgsCiAgICAgICAgICBleGl0OiBleGl0Q2FsbHMuYWRkLAogICAgICAgICk7CiAgICAgICAgZmluYWwgYnVpbGREaXJlY3RvcnlDb250ZW50cyA9IGJ1aWxkRGlyZWN0b3J5Lmxpc3RTeW5jKCk7CiAgICAgICAgZXhwZWN0KGJ1aWxkRGlyZWN0b3J5Q29udGVudHMsIGhhc0xlbmd0aCgxKSk7CiAgICAgICAgZmluYWwgcHVic3BlY092ZXJyaWRlcyA9IGJ1aWxkRGlyZWN0b3J5Q29udGVudHMuZmlyc3QgYXMgRmlsZTsKICAgICAgICBleHBlY3QocHVic3BlY092ZXJyaWRlcy5yZWFkQXNTdHJpbmdTeW5jKCksIGVxdWFscygnJycKJG9yaWdpbmFsUHVic3BlY092ZXJyaWRlc0NvbnRlbnQKcmVzb2x1dGlvbjogbnVsbAonJycpKTsKICAgICAgfSk7CiAgICB9KTsKCiAgICBncm91cCgnd2hlbiB1bmFibGUgdG8gcmVhZCBwdWJzcGVjX292ZXJyaWRlcycsICgpIHsKICAgICAgc2V0VXAoKCkgewogICAgICAgIGZpbmFsIHB1YnNwZWNPdmVycmlkZXMgPSBGaWxlKAogICAgICAgICAgcGF0aC5qb2luKGJ1aWxkRGlyZWN0b3J5LnBhdGgsICdwdWJzcGVjX292ZXJyaWRlcy55YW1sJyksCiAgICAgICAgKS4uY3JlYXRlU3luYygpOwogICAgICAgIFByb2Nlc3MucnVuU3luYygnY2htb2QnLCBbJzAwMCcsIHB1YnNwZWNPdmVycmlkZXMucGF0aF0pOwogICAgICB9KTsKCiAgICAgIHRlc3QoJ2V4aXRzIHdpdGggZXJyb3InLCAoKSB7CiAgICAgICAgZGlzYWJsZVdvcmtzcGFjZVJlc29sdXRpb24oCiAgICAgICAgICBjb250ZXh0LAogICAgICAgICAgYnVpbGREaXJlY3Rvcnk6IGJ1aWxkRGlyZWN0b3J5LnBhdGgsCiAgICAgICAgICBleGl0OiBleGl0Q2FsbHMuYWRkLAogICAgICAgICk7CiAgICAgICAgZmluYWwgYnVpbGREaXJlY3RvcnlDb250ZW50cyA9IGJ1aWxkRGlyZWN0b3J5Lmxpc3RTeW5jKCk7CiAgICAgICAgZXhwZWN0KGJ1aWxkRGlyZWN0b3J5Q29udGVudHMsIGhhc0xlbmd0aCgxKSk7CiAgICAgICAgZXhwZWN0KGV4aXRDYWxscywgZXF1YWxzKFsxXSkpOwogICAgICAgIHZlcmlmeSgKICAgICAgICAgICgpID0+IGxvZ2dlci5lcnIoYW55KHRoYXQ6IGNvbnRhaW5zKCdQZXJtaXNzaW9uIGRlbmllZCcpKSksCiAgICAgICAgKS5jYWxsZWQoMSk7CiAgICAgIH0pOwogICAgfSk7CiAgfSk7Cn0K", + "type": "text" + }, { "path": "test/src/exit_overrides_test.dart", "data": @@ -136,13 +304,13 @@ final dartFrogProdServerBundle = MasonBundle.fromJson({ { "path": "test/src/get_internal_path_dependencies_test.dart", "data": - "aW1wb3J0ICdkYXJ0OmlvJzsKCmltcG9ydCAncGFja2FnZTpkYXJ0X2Zyb2dfcHJvZF9zZXJ2ZXJfaG9va3MvZGFydF9mcm9nX3Byb2Rfc2VydmVyX2hvb2tzLmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6cGF0aC9wYXRoLmRhcnQnIGFzIHBhdGg7CmltcG9ydCAncGFja2FnZTp0ZXN0L3Rlc3QuZGFydCc7Cgp2b2lkIG1haW4oKSB7CiAgZ3JvdXAoJ2dldFBhdGhEZXBlbmRlbmNpZXMnLCAoKSB7CiAgICB0ZXN0KCdyZXR1cm5zIG5vdGhpbmcgd2hlbiB0aGVyZSBhcmUgbm8gcGF0aCBkZXBlbmRlbmNpZXMnLCAoKSB7CiAgICAgIGZpbmFsIGRpcmVjdG9yeSA9IERpcmVjdG9yeS5zeXN0ZW1UZW1wLmNyZWF0ZVRlbXBTeW5jKCk7CiAgICAgIEZpbGUocGF0aC5qb2luKGRpcmVjdG9yeS5wYXRoLCAncHVic3BlYy5sb2NrJykpLndyaXRlQXNTdHJpbmdTeW5jKAogICAgICAgICcnJwpwYWNrYWdlczoKICB0ZXN0OgogICAgZGVwZW5kZW5jeTogdHJhbnNpdGl2ZQogICAgZGVzY3JpcHRpb246CiAgICAgIG5hbWU6IGFuYWx5emVyCiAgICAgIHNoYTI1NjogZjg1NTY2ZWM3YjNkMjVjYmVhNjBmN2RkNGYxNTdjNTAyNWYyZjE5MjMzY2E0ZmVlZWQzM2I2MTZjNzhhMjZhMwogICAgICB1cmw6ICJodHRwczovL3B1Yi5kZXYiCiAgICBzb3VyY2U6IGhvc3RlZAogICAgdmVyc2lvbjogIjYuMS4wIgogIG1hc29uOgogICAgZGVwZW5kZW5jeTogdHJhbnNpdGl2ZQogICAgZGVzY3JpcHRpb246CiAgICAgIG5hbWU6IGFuYWx5emVyCiAgICAgIHNoYTI1NjogZjg1NTY2ZWM3YjNkMjVjYmVhNjBmN2RkNGYxNTdjNTAyNWYyZjE5MjMzY2E0ZmVlZWQzM2I2MTZjNzhhMjZhMwogICAgICB1cmw6ICJodHRwczovL3B1Yi5kZXYiCiAgICBzb3VyY2U6IGhvc3RlZAogICAgdmVyc2lvbjogIjYuMS4wIgonJycsCiAgICAgICk7CiAgICAgIGV4cGVjdChnZXRJbnRlcm5hbFBhdGhEZXBlbmRlbmNpZXMoZGlyZWN0b3J5KSwgY29tcGxldGlvbihpc0VtcHR5KSk7CiAgICAgIGRpcmVjdG9yeS5kZWxldGUocmVjdXJzaXZlOiB0cnVlKS5pZ25vcmUoKTsKICAgIH0pOwoKICAgIHRlc3QoJ3JldHVybnMgY29ycmVjdCBwYXRoIGRlcGVuZGVuY2llcycsICgpIHsKICAgICAgZmluYWwgZGlyZWN0b3J5ID0gRGlyZWN0b3J5LnN5c3RlbVRlbXAuY3JlYXRlVGVtcFN5bmMoKTsKICAgICAgRmlsZShwYXRoLmpvaW4oZGlyZWN0b3J5LnBhdGgsICdwdWJzcGVjLmxvY2snKSkud3JpdGVBc1N0cmluZ1N5bmMoCiAgICAgICAgJycnCnBhY2thZ2VzOgogIGRhcnRfZnJvZzoKICAgIGRlcGVuZGVuY3k6ICJkaXJlY3QgbWFpbiIKICAgIGRlc2NyaXB0aW9uOgogICAgICBwYXRoOiAicGF0aC90by9kYXJ0X2Zyb2ciCiAgICAgIHJlbGF0aXZlOiB0cnVlCiAgICBzb3VyY2U6IHBhdGgKICAgIHZlcnNpb246ICIwLjAuMCIKICBkYXJ0X2Zyb2dfZ2VuOgogICAgZGVwZW5kZW5jeTogImRpcmVjdCBtYWluIgogICAgZGVzY3JpcHRpb246CiAgICAgIHBhdGg6ICJwYXRoL3RvL2RhcnRfZnJvZ19nZW4iCiAgICAgIHJlbGF0aXZlOiB0cnVlCiAgICBzb3VyY2U6IHBhdGgKICAgIHZlcnNpb246ICIwLjAuMCIKJycnLAogICAgICApOwogICAgICBleHBlY3QoCiAgICAgICAgZ2V0SW50ZXJuYWxQYXRoRGVwZW5kZW5jaWVzKGRpcmVjdG9yeSksCiAgICAgICAgY29tcGxldGlvbigKICAgICAgICAgIGVxdWFscyhbJ3BhdGgvdG8vZGFydF9mcm9nJywgJ3BhdGgvdG8vZGFydF9mcm9nX2dlbiddKSwKICAgICAgICApLAogICAgICApOwogICAgICBkaXJlY3RvcnkuZGVsZXRlKHJlY3Vyc2l2ZTogdHJ1ZSkuaWdub3JlKCk7CiAgICB9KTsKICB9KTsKfQo=", + "aW1wb3J0ICdkYXJ0OmlvJzsKCmltcG9ydCAncGFja2FnZTpkYXJ0X2Zyb2dfcHJvZF9zZXJ2ZXJfaG9va3MvZGFydF9mcm9nX3Byb2Rfc2VydmVyX2hvb2tzLmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6cGF0aC9wYXRoLmRhcnQnIGFzIHBhdGg7CmltcG9ydCAncGFja2FnZTp0ZXN0L3Rlc3QuZGFydCc7Cgp2b2lkIG1haW4oKSB7CiAgZ3JvdXAoJ2dldFBhdGhEZXBlbmRlbmNpZXMnLCAoKSB7CiAgICB0ZXN0KCdyZXR1cm5zIG5vdGhpbmcgd2hlbiB0aGVyZSBhcmUgbm8gcGF0aCBkZXBlbmRlbmNpZXMnLCAoKSB7CiAgICAgIGZpbmFsIGRpcmVjdG9yeSA9IERpcmVjdG9yeS5zeXN0ZW1UZW1wLmNyZWF0ZVRlbXBTeW5jKCk7CiAgICAgIEZpbGUocGF0aC5qb2luKGRpcmVjdG9yeS5wYXRoLCAncHVic3BlYy55YW1sJykpLndyaXRlQXNTdHJpbmdTeW5jKAogICAgICAgICcnJwpuYW1lOiBfCmRlcGVuZGVuY2llczoKICB0ZXN0OiBeMS4wLjAKICBtYXNvbjogXjAuMS4wCicnJywKICAgICAgKTsKICAgICAgZXhwZWN0KGdldEludGVybmFsUGF0aERlcGVuZGVuY2llcyhkaXJlY3RvcnkpLCBjb21wbGV0aW9uKGlzRW1wdHkpKTsKICAgICAgZGlyZWN0b3J5LmRlbGV0ZShyZWN1cnNpdmU6IHRydWUpLmlnbm9yZSgpOwogICAgfSk7CgogICAgdGVzdCgncmV0dXJucyBjb3JyZWN0IHBhdGggZGVwZW5kZW5jaWVzJywgKCkgewogICAgICBmaW5hbCBkaXJlY3RvcnkgPSBEaXJlY3Rvcnkuc3lzdGVtVGVtcC5jcmVhdGVUZW1wU3luYygpOwogICAgICBGaWxlKHBhdGguam9pbihkaXJlY3RvcnkucGF0aCwgJ3B1YnNwZWMueWFtbCcpKS53cml0ZUFzU3RyaW5nU3luYygKICAgICAgICAnJycKbmFtZTogXwpkZXBlbmRlbmNpZXM6CiAgZGFydF9mcm9nOgogICAgcGF0aDogcGF0aC90by9kYXJ0X2Zyb2cKICBkYXJ0X2Zyb2dfZ2VuOgogICAgcGF0aDogcGF0aC90by9kYXJ0X2Zyb2dfZ2VuCicnJywKICAgICAgKTsKICAgICAgZXhwZWN0KAogICAgICAgIGdldEludGVybmFsUGF0aERlcGVuZGVuY2llcyhkaXJlY3RvcnkpLAogICAgICAgIGNvbXBsZXRpb24oCiAgICAgICAgICBlcXVhbHMoWydwYXRoL3RvL2RhcnRfZnJvZycsICdwYXRoL3RvL2RhcnRfZnJvZ19nZW4nXSksCiAgICAgICAgKSwKICAgICAgKTsKICAgICAgZGlyZWN0b3J5LmRlbGV0ZShyZWN1cnNpdmU6IHRydWUpLmlnbm9yZSgpOwogICAgfSk7CiAgfSk7Cn0K", "type": "text" }, { - "path": "test/src/pubspec_lock/pubspec_lock_test.dart", + "path": "test/src/uses_workspace_resolution_test.dart", "data": - "Ly8gaWdub3JpbmcgZm9yIHRlc3RpbmcgcHVycG9zZXMKLy8gaWdub3JlX2Zvcl9maWxlOiBwcmVmZXJfY29uc3RfY29uc3RydWN0b3JzCgppbXBvcnQgJ3BhY2thZ2U6ZGFydF9mcm9nX3Byb2Rfc2VydmVyX2hvb2tzL3NyYy9wdWJzcGVjX2xvY2svcHVic3BlY19sb2NrLmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6dGVzdC90ZXN0LmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6eWFtbC95YW1sLmRhcnQnOwoKdm9pZCBtYWluKCkgewogIGdyb3VwKCckUHVic3BlY0xvY2snLCAoKSB7CiAgICBncm91cCgnZnJvbVN0cmluZycsICgpIHsKICAgICAgdGVzdCgncGFyc2VzIGNvcnJlY3RseScsICgpIHsKICAgICAgICBmaW5hbCBwdWJzcGVjTG9jayA9IFB1YnNwZWNMb2NrLmZyb21TdHJpbmcoX3B1YnNwZWNMb2NrQ29udGVudCk7CgogICAgICAgIGV4cGVjdCgKICAgICAgICAgIHB1YnNwZWNMb2NrLnBhY2thZ2VzLAogICAgICAgICAgZXF1YWxzKAogICAgICAgICAgICBjb25zdCBbCiAgICAgICAgICAgICAgUHVic3BlY0xvY2tQYWNrYWdlKAogICAgICAgICAgICAgICAgbmFtZTogJ3ZlcnlfZ29vZF90ZXN0X3J1bm5lcicsCiAgICAgICAgICAgICAgICB0eXBlOiBQdWJzcGVjTG9ja1BhY2thZ2VEZXBlbmRlbmN5VHlwZS5kaXJlY3RNYWluLAogICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgUHVic3BlY0xvY2tQYWNrYWdlKAogICAgICAgICAgICAgICAgbmFtZTogJ3ZlcnlfZ29vZF9hbmFseXNpcycsCiAgICAgICAgICAgICAgICB0eXBlOiBQdWJzcGVjTG9ja1BhY2thZ2VEZXBlbmRlbmN5VHlwZS5kaXJlY3REZXYsCiAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICBQdWJzcGVjTG9ja1BhY2thZ2UoCiAgICAgICAgICAgICAgICBuYW1lOiAneWFtbCcsCiAgICAgICAgICAgICAgICB0eXBlOiBQdWJzcGVjTG9ja1BhY2thZ2VEZXBlbmRlbmN5VHlwZS50cmFuc2l0aXZlLAogICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgUHVic3BlY0xvY2tQYWNrYWdlKAogICAgICAgICAgICAgICAgbmFtZTogJ3BhdGgnLAogICAgICAgICAgICAgICAgdHlwZTogUHVic3BlY0xvY2tQYWNrYWdlRGVwZW5kZW5jeVR5cGUuZGlyZWN0T3ZlcnJpZGRlbiwKICAgICAgICAgICAgICApLAogICAgICAgICAgICAgIFB1YnNwZWNMb2NrUGFja2FnZSgKICAgICAgICAgICAgICAgIG5hbWU6ICdmb28nLAogICAgICAgICAgICAgICAgdHlwZTogUHVic3BlY0xvY2tQYWNrYWdlRGVwZW5kZW5jeVR5cGUuZGlyZWN0TWFpbiwKICAgICAgICAgICAgICAgIHBhdGhEZXNjcmlwdGlvbjogUHVic3BlY1BhY2thZ2VQYXRoRGVzY3JpcHRpb24oCiAgICAgICAgICAgICAgICAgIHBhdGg6ICdwYWNrYWdlcy9mb28nLAogICAgICAgICAgICAgICAgICByZWxhdGl2ZTogdHJ1ZSwKICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICBQdWJzcGVjTG9ja1BhY2thZ2UoCiAgICAgICAgICAgICAgICBuYW1lOiAneWFtbDInLAogICAgICAgICAgICAgICAgdHlwZTogUHVic3BlY0xvY2tQYWNrYWdlRGVwZW5kZW5jeVR5cGUudHJhbnNpdGl2ZSwKICAgICAgICAgICAgICApLAogICAgICAgICAgICBdLAogICAgICAgICAgKSwKICAgICAgICApOwogICAgICB9KTsKCiAgICAgIHRlc3QoJ3Rocm93cyBhICRQdWJzcGVjTG9ja1BhcnNlRXhjZXB0aW9uIHdoZW4gY29udGVudCBpcyBlbXB0eScsICgpIHsKICAgICAgICBleHBlY3QoCiAgICAgICAgICAoKSA9PiBQdWJzcGVjTG9jay5mcm9tU3RyaW5nKCcnKSwKICAgICAgICAgIHRocm93c0EoaXNBPFB1YnNwZWNMb2NrUGFyc2VFeGNlcHRpb24+KCkpLAogICAgICAgICk7CiAgICAgIH0pOwoKICAgICAgdGVzdCgncmV0dXJucyBlbXB0eSBQdWJzcGVjTG9jayB3aGVuIGNvbnRlbnQgaGFzIG5vIHBhY2thZ2VzIGVudHJ5JywgKCkgewogICAgICAgIGZpbmFsIHB1YnNwZWNMb2NrID0gUHVic3BlY0xvY2suZnJvbVN0cmluZyhfZW1wdHlQdWJzcGVjTG9ja0NvbnRlbnQpOwogICAgICAgIGV4cGVjdChwdWJzcGVjTG9jay5wYWNrYWdlcywgaXNFbXB0eSk7CiAgICAgIH0pOwogICAgfSk7CiAgfSk7CgogIGdyb3VwKCckUHVic3BlY0xvY2tQYWNrYWdlJywgKCkgewogICAgdGVzdCgnY2FuIGJlIGluc3RhbnRpYXRlZCcsICgpIHsKICAgICAgZXhwZWN0KAogICAgICAgIFB1YnNwZWNMb2NrUGFja2FnZSgKICAgICAgICAgIG5hbWU6ICdmb28nLAogICAgICAgICAgdHlwZTogUHVic3BlY0xvY2tQYWNrYWdlRGVwZW5kZW5jeVR5cGUuZGlyZWN0TWFpbiwKICAgICAgICApLAogICAgICAgIGlzQTxQdWJzcGVjTG9ja1BhY2thZ2U+KCksCiAgICAgICk7CiAgICB9KTsKCiAgICB0ZXN0KCdzdXBwb3J0cyB2YWx1ZSBlcXVhbGl0eScsICgpIHsKICAgICAgZmluYWwgcGFja2FnZTEgPSBQdWJzcGVjTG9ja1BhY2thZ2UoCiAgICAgICAgbmFtZTogJ2ZvbycsCiAgICAgICAgdHlwZTogUHVic3BlY0xvY2tQYWNrYWdlRGVwZW5kZW5jeVR5cGUuZGlyZWN0TWFpbiwKICAgICAgKTsKICAgICAgZmluYWwgcGFja2FnZTIgPSBQdWJzcGVjTG9ja1BhY2thZ2UoCiAgICAgICAgbmFtZTogJ2ZvbycsCiAgICAgICAgdHlwZTogUHVic3BlY0xvY2tQYWNrYWdlRGVwZW5kZW5jeVR5cGUuZGlyZWN0TWFpbiwKICAgICAgKTsKICAgICAgZmluYWwgcGFja2FnZTMgPSBQdWJzcGVjTG9ja1BhY2thZ2UoCiAgICAgICAgbmFtZTogJ2JhcicsCiAgICAgICAgdHlwZTogUHVic3BlY0xvY2tQYWNrYWdlRGVwZW5kZW5jeVR5cGUudHJhbnNpdGl2ZSwKICAgICAgKTsKCiAgICAgIGV4cGVjdChwYWNrYWdlMSwgZXF1YWxzKHBhY2thZ2UyKSk7CiAgICAgIGV4cGVjdChwYWNrYWdlMSwgaXNOb3QoZXF1YWxzKHBhY2thZ2UzKSkpOwogICAgICBleHBlY3QocGFja2FnZTIsIGlzTm90KGVxdWFscyhwYWNrYWdlMykpKTsKICAgIH0pOwogIH0pOwoKICBncm91cCgnJFB1YnNwZWNMb2NrUGFja2FnZURlcGVuZGVuY3lUeXBlJywgKCkgewogICAgZ3JvdXAoJ3BhcnNlJywgKCkgewogICAgICB0ZXN0KCdwYXJzZXMgc3VjY2Vzc2Z1bGx5IGBkaXJlY3QgbWFpbmAnLCAoKSB7CiAgICAgICAgZXhwZWN0KAogICAgICAgICAgUHVic3BlY0xvY2tQYWNrYWdlRGVwZW5kZW5jeVR5cGUucGFyc2UoJ2RpcmVjdCBtYWluJyksCiAgICAgICAgICBlcXVhbHMoUHVic3BlY0xvY2tQYWNrYWdlRGVwZW5kZW5jeVR5cGUuZGlyZWN0TWFpbiksCiAgICAgICAgKTsKICAgICAgfSk7CgogICAgICB0ZXN0KCdwYXJzZXMgc3VjY2Vzc2Z1bGx5IGBkaXJlY3QgZGV2YCcsICgpIHsKICAgICAgICBleHBlY3QoCiAgICAgICAgICBQdWJzcGVjTG9ja1BhY2thZ2VEZXBlbmRlbmN5VHlwZS5wYXJzZSgnZGlyZWN0IGRldicpLAogICAgICAgICAgZXF1YWxzKFB1YnNwZWNMb2NrUGFja2FnZURlcGVuZGVuY3lUeXBlLmRpcmVjdERldiksCiAgICAgICAgKTsKICAgICAgfSk7CgogICAgICB0ZXN0KCdwYXJzZXMgc3VjY2Vzc2Z1bGx5IGBkaXJlY3Qgb3ZlcnJpZGRlbmAnLCAoKSB7CiAgICAgICAgZXhwZWN0KAogICAgICAgICAgUHVic3BlY0xvY2tQYWNrYWdlRGVwZW5kZW5jeVR5cGUucGFyc2UoJ2RpcmVjdCBvdmVycmlkZGVuJyksCiAgICAgICAgICBlcXVhbHMoUHVic3BlY0xvY2tQYWNrYWdlRGVwZW5kZW5jeVR5cGUuZGlyZWN0T3ZlcnJpZGRlbiksCiAgICAgICAgKTsKICAgICAgfSk7CgogICAgICB0ZXN0KCdwYXJzZXMgc3VjY2Vzc2Z1bGx5IGB0cmFuc2l0aXZlYCcsICgpIHsKICAgICAgICBleHBlY3QoCiAgICAgICAgICBQdWJzcGVjTG9ja1BhY2thZ2VEZXBlbmRlbmN5VHlwZS5wYXJzZSgndHJhbnNpdGl2ZScpLAogICAgICAgICAgZXF1YWxzKFB1YnNwZWNMb2NrUGFja2FnZURlcGVuZGVuY3lUeXBlLnRyYW5zaXRpdmUpLAogICAgICAgICk7CiAgICAgIH0pOwoKICAgICAgdGVzdCgndGhyb3dzIGEgJEFyZ3VtZW50RXJyb3Igd2hlbiB0eXBlIGlzIGludmFsaWQnLCAoKSB7CiAgICAgICAgZXhwZWN0KAogICAgICAgICAgKCkgPT4gUHVic3BlY0xvY2tQYWNrYWdlRGVwZW5kZW5jeVR5cGUucGFyc2UoJ2ludmFsaWQnKSwKICAgICAgICAgIHRocm93c0EoaXNBPEFyZ3VtZW50RXJyb3I+KCkpLAogICAgICAgICk7CiAgICAgIH0pOwogICAgfSk7CiAgfSk7CgogIGdyb3VwKCckUHVic3BlY1BhY2thZ2VQYXRoRGVzY3JpcHRpb24nLCAoKSB7CiAgICB0ZXN0KCdjYW4gYmUgaW5zdGFudGlhdGVkJywgKCkgewogICAgICBleHBlY3QoCiAgICAgICAgUHVic3BlY1BhY2thZ2VQYXRoRGVzY3JpcHRpb24oCiAgICAgICAgICBwYXRoOiAncGFja2FnZXMvZm9vJywKICAgICAgICAgIHJlbGF0aXZlOiB0cnVlLAogICAgICAgICksCiAgICAgICAgaXNBPFB1YnNwZWNQYWNrYWdlUGF0aERlc2NyaXB0aW9uPigpLAogICAgICApOwogICAgfSk7CgogICAgdGVzdCgnc3VwcG9ydHMgdmFsdWUgZXF1YWxpdHknLCAoKSB7CiAgICAgIGZpbmFsIGRlc2NyaXB0aW9uMSA9IFB1YnNwZWNQYWNrYWdlUGF0aERlc2NyaXB0aW9uKAogICAgICAgIHBhdGg6ICdwYWNrYWdlcy9mb28nLAogICAgICAgIHJlbGF0aXZlOiB0cnVlLAogICAgICApOwogICAgICBmaW5hbCBkZXNjcmlwdGlvbjIgPSBQdWJzcGVjUGFja2FnZVBhdGhEZXNjcmlwdGlvbigKICAgICAgICBwYXRoOiAncGFja2FnZXMvZm9vJywKICAgICAgICByZWxhdGl2ZTogdHJ1ZSwKICAgICAgKTsKICAgICAgZmluYWwgZGVzY3JpcHRpb24zID0gUHVic3BlY1BhY2thZ2VQYXRoRGVzY3JpcHRpb24oCiAgICAgICAgcGF0aDogJ3BhY2thZ2VzL2JhcicsCiAgICAgICAgcmVsYXRpdmU6IHRydWUsCiAgICAgICk7CiAgICAgIGZpbmFsIGRlc2NyaXB0aW9uNCA9IFB1YnNwZWNQYWNrYWdlUGF0aERlc2NyaXB0aW9uKAogICAgICAgIHBhdGg6ICdwYWNrYWdlcy9mb28nLAogICAgICAgIHJlbGF0aXZlOiBmYWxzZSwKICAgICAgKTsKCiAgICAgIGV4cGVjdChkZXNjcmlwdGlvbjEsIGVxdWFscyhkZXNjcmlwdGlvbjIpKTsKICAgICAgZXhwZWN0KGRlc2NyaXB0aW9uMSwgaXNOb3QoZXF1YWxzKGRlc2NyaXB0aW9uMykpKTsKICAgICAgZXhwZWN0KGRlc2NyaXB0aW9uMSwgaXNOb3QoZXF1YWxzKGRlc2NyaXB0aW9uNCkpKTsKICAgICAgZXhwZWN0KGRlc2NyaXB0aW9uMywgaXNOb3QoZXF1YWxzKGRlc2NyaXB0aW9uNCkpKTsKICAgIH0pOwoKICAgIGdyb3VwKCd0cnlQYXJzZScsICgpIHsKICAgICAgdGVzdCgncGFyc2VzJywgKCkgewogICAgICAgIGZpbmFsIGRhdGEgPSBsb2FkWWFtbCgKICAgICAgICAgICcnJwpwYXRoOiAicGFja2FnZXMvZm9vIgpyZWxhdGl2ZTogdHJ1ZQogICAgICAgICAgICAnJycsCiAgICAgICAgKSBhcyBZYW1sTWFwOwoKICAgICAgICBmaW5hbCBkZXNjcmlwdGlvbiA9IFB1YnNwZWNQYWNrYWdlUGF0aERlc2NyaXB0aW9uLnRyeVBhcnNlKGRhdGEpOwoKICAgICAgICBleHBlY3QoCiAgICAgICAgICBkZXNjcmlwdGlvbiwKICAgICAgICAgIGVxdWFscygKICAgICAgICAgICAgUHVic3BlY1BhY2thZ2VQYXRoRGVzY3JpcHRpb24oCiAgICAgICAgICAgICAgcGF0aDogJ3BhY2thZ2VzL2ZvbycsCiAgICAgICAgICAgICAgcmVsYXRpdmU6IHRydWUsCiAgICAgICAgICAgICksCiAgICAgICAgICApLAogICAgICAgICk7CiAgICAgIH0pOwoKICAgICAgZ3JvdXAoJ3JldHVybnMgbnVsbCcsICgpIHsKICAgICAgICB0ZXN0KCd3aGVuIG1pc3NpbmcgInBhdGgiJywgKCkgewogICAgICAgICAgZmluYWwgZGF0YSA9IGxvYWRZYW1sKAogICAgICAgICAgICAnJycKcmVsYXRpdmU6IHRydWUKICAgICAgICAgICAgJycnLAogICAgICAgICAgKSBhcyBZYW1sTWFwOwoKICAgICAgICAgIGZpbmFsIGRlc2NyaXB0aW9uID0gUHVic3BlY1BhY2thZ2VQYXRoRGVzY3JpcHRpb24udHJ5UGFyc2UoZGF0YSk7CgogICAgICAgICAgZXhwZWN0KGRlc2NyaXB0aW9uLCBpc051bGwpOwogICAgICAgIH0pOwoKICAgICAgICB0ZXN0KCd3aGVuICJwYXRoIiBpcyBub3QgYSBTdHJpbmcnLCAoKSB7CiAgICAgICAgICBmaW5hbCBkYXRhID0gbG9hZFlhbWwoCiAgICAgICAgICAgICcnJwpwYXRoOiAxCnJlbGF0aXZlOiB0cnVlCiAgICAgICAgICAgICcnJywKICAgICAgICAgICkgYXMgWWFtbE1hcDsKCiAgICAgICAgICBmaW5hbCBkZXNjcmlwdGlvbiA9IFB1YnNwZWNQYWNrYWdlUGF0aERlc2NyaXB0aW9uLnRyeVBhcnNlKGRhdGEpOwoKICAgICAgICAgIGV4cGVjdChkZXNjcmlwdGlvbiwgaXNOdWxsKTsKICAgICAgICB9KTsKCiAgICAgICAgdGVzdCgnd2hlbiBtaXNzaW5nICJyZWxhdGl2ZSInLCAoKSB7CiAgICAgICAgICBmaW5hbCBkYXRhID0gbG9hZFlhbWwoCiAgICAgICAgICAgICcnJwpwYXRoOiAicGFja2FnZXMvZm9vIgogICAgICAgICAgICAnJycsCiAgICAgICAgICApIGFzIFlhbWxNYXA7CgogICAgICAgICAgZmluYWwgZGVzY3JpcHRpb24gPSBQdWJzcGVjUGFja2FnZVBhdGhEZXNjcmlwdGlvbi50cnlQYXJzZShkYXRhKTsKCiAgICAgICAgICBleHBlY3QoZGVzY3JpcHRpb24sIGlzTnVsbCk7CiAgICAgICAgfSk7CgogICAgICAgIHRlc3QoJ3doZW4gInJlbGF0aXZlIiBpcyBub3QgYSBib29sJywgKCkgewogICAgICAgICAgZmluYWwgZGF0YSA9IGxvYWRZYW1sKAogICAgICAgICAgICAnJycKcGF0aDogInBhY2thZ2VzL2ZvbyIKcmVsYXRpdmU6IDUKICAgICAgICAgICAgJycnLAogICAgICAgICAgKSBhcyBZYW1sTWFwOwoKICAgICAgICAgIGZpbmFsIGRlc2NyaXB0aW9uID0gUHVic3BlY1BhY2thZ2VQYXRoRGVzY3JpcHRpb24udHJ5UGFyc2UoZGF0YSk7CgogICAgICAgICAgZXhwZWN0KGRlc2NyaXB0aW9uLCBpc051bGwpOwogICAgICAgIH0pOwogICAgICB9KTsKICAgIH0pOwogIH0pOwp9CgovLy8gQW4gZXhhbXBsZSBwdWJzcGVjLmxvY2sgY29udGVudCB1c2VkIHRvIHRlc3QgdGhlIFtQdWJzcGVjTG9ja10gY2xhc3MuCi8vLwovLy8gSXQgaGFzIGJlZW4gYXJ0aWZpY2lhbGx5IGNyYWZ0ZWQgdG8gaW5jbHVkZToKLy8vIC0gb25lIHB1YiBob3N0ZWQgZGlyZWN0IG1haW4gcGFja2FnZSBlbnRyeQovLy8gLSBvbmUgcHViIGhvc3RlZCBkaXJlY3QgZGV2IHBhY2thZ2UgZW50cnkKLy8vIC0gb25lIHB1YiBob3N0ZWQgdHJhbnNpdGl2ZSBwYWNrYWdlIGVudHJ5Ci8vLyAtIG9uZSBwdWIgaG9zdGVkIG92ZXJyaWRkZW4gcGFja2FnZSBlbnRyeQovLy8gLSBvbmUgcGF0aCBkaXJlY3QgbWFpbiBwYWNrYWdlIGVudHJ5Ci8vLyAtIG9uZSBub3QgcHViIGhvc3RlZCB0cmFuc2l0aXZlIHBhY2thZ2UgZW50cnkKLy8vIC0gb25lIGludmFsaWQgcGFja2FnZSBlbnRyeQpjb25zdCBfcHVic3BlY0xvY2tDb250ZW50ID0gJycnCnBhY2thZ2VzOgogIHZlcnlfZ29vZF90ZXN0X3J1bm5lcjoKICAgIGRlcGVuZGVuY3k6ICJkaXJlY3QgbWFpbiIKICAgIGRlc2NyaXB0aW9uOgogICAgICBuYW1lOiB2ZXJ5X2dvb2RfdGVzdF9ydW5uZXIKICAgICAgc2hhMjU2OiAiNGQ0MWU1ZDc2NzdkMjU5YjlhMTU5OWM3ODY0NWFjMmQzNmJjMmJkNmZmNzc3MzUwN2JjYjBiYWI0MTQxN2ZlMiIKICAgICAgdXJsOiAiaHR0cHM6Ly9wdWIuZGV2IgogICAgc291cmNlOiBob3N0ZWQKICAgIHZlcnNpb246ICIwLjEuMiIKICB2ZXJ5X2dvb2RfYW5hbHlzaXM6CiAgICBkZXBlbmRlbmN5OiAiZGlyZWN0IGRldiIKICAgIGRlc2NyaXB0aW9uOgogICAgICBuYW1lOiB2ZXJ5X2dvb2RfYW5hbHlzaXMKICAgICAgc2hhMjU2OiAiOWFlN2YzYTNiZDU3NjRmYjAyMWIzMzVjYTI4YTM0ZjA0MGNkMGFiNmVlYzAwYTFiMjEzYjQ0NWRhZTU4YTRiOCIKICAgICAgdXJsOiAiaHR0cHM6Ly9wdWIuZGV2IgogICAgc291cmNlOiBob3N0ZWQKICAgIHZlcnNpb246ICI1LjEuMCIKICB5YW1sOgogICAgZGVwZW5kZW5jeTogdHJhbnNpdGl2ZQogICAgZGVzY3JpcHRpb246CiAgICAgIG5hbWU6IHlhbWwKICAgICAgc2hhMjU2OiAiNzU3Njk1MDFlYTM0ODlmY2E1NjYwMWZmMzM0NTRmZTQ1NTA3ZWEzYmZiMDE0MTYxYWJjM2I0M2FlMjU5ODlkNSIKICAgICAgdXJsOiAiaHR0cHM6Ly9wdWIuZGV2IgogICAgc291cmNlOiBob3N0ZWQKICAgIHZlcnNpb246ICIzLjEuMiIKICBwYXRoOgogICAgZGVwZW5kZW5jeTogImRpcmVjdCBvdmVycmlkZGVuIgogICAgZGVzY3JpcHRpb246CiAgICAgIG5hbWU6IHBhdGgKICAgICAgc2hhMjU2OiAiMDg3Y2U0OWMzZjBkYzM5MTgwYmVmZWZjNjBmZGI0YWNkOGY4NjIwZTU2ODJmZTI0NzZhZmQwYjM2ODhiYjRhZiIKICAgICAgdXJsOiAiaHR0cHM6Ly9wdWIuZGV2IgogICAgc291cmNlOiBob3N0ZWQKICAgIHZlcnNpb246ICIxLjkuMCIKICBmb286CiAgICBkZXBlbmRlbmN5OiAiZGlyZWN0IG1haW4iCiAgICBkZXNjcmlwdGlvbjoKICAgICAgcGF0aDogInBhY2thZ2VzL2ZvbyIKICAgICAgcmVsYXRpdmU6IHRydWUKICAgIHNvdXJjZTogcGF0aAogICAgdmVyc2lvbjogIjEuMC4wKzEiCiAgeWFtbDI6CiAgICBkZXBlbmRlbmN5OiB0cmFuc2l0aXZlCiAgICBkZXNjcmlwdGlvbjoKICAgICAgbmFtZTogeWFtbAogICAgICBzaGEyNTY6ICI3NTc2OTUwMWVhMzQ4OWZjYTU2NjAxZmYzMzQ1NGZlNDU1MDdlYTNiZmIwMTQxNjFhYmMzYjQzYWUyNTk4OWQ1IgogICAgICB1cmw6ICJodHRwczovL25vdC1wdWIuZGV2IgogICAgc291cmNlOiBob3N0ZWQKICAgIHZlcnNpb246ICIzLjEuMiIKICBiYWRfcGFja2FnZToKICAgIG5vdF9kZXBlbmRlbmN5OiAiYmFkIgpzZGtzOgogIGRhcnQ6ICI+PTMuMS4wIDw0LjAuMCIKCicnJzsKCi8vLyBBIHZhbGlkIHB1YnNwZWMgbG9jayBmaWxlIHdpdGggbm8gcGFja2FnZXMuCmNvbnN0IF9lbXB0eVB1YnNwZWNMb2NrQ29udGVudCA9ICcnJwpzZGtzOgogIGRhcnQ6ICI+PTMuMS4wIDw0LjAuMCIKCicnJzsK", + "aW1wb3J0ICdkYXJ0OmlvJzsKCmltcG9ydCAncGFja2FnZTpkYXJ0X2Zyb2dfcHJvZF9zZXJ2ZXJfaG9va3MvZGFydF9mcm9nX3Byb2Rfc2VydmVyX2hvb2tzLmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6bWFzb24vbWFzb24uZGFydCc7CmltcG9ydCAncGFja2FnZTptb2NrdGFpbC9tb2NrdGFpbC5kYXJ0JzsKaW1wb3J0ICdwYWNrYWdlOnBhdGgvcGF0aC5kYXJ0JyBhcyBwYXRoOwppbXBvcnQgJ3BhY2thZ2U6dGVzdC90ZXN0LmRhcnQnOwoKY2xhc3MgX01vY2tIb29rQ29udGV4dCBleHRlbmRzIE1vY2sgaW1wbGVtZW50cyBIb29rQ29udGV4dCB7fQoKY2xhc3MgX01vY2tMb2dnZXIgZXh0ZW5kcyBNb2NrIGltcGxlbWVudHMgTG9nZ2VyIHt9Cgp2b2lkIG1haW4oKSB7CiAgZ3JvdXAoJ3VzZXNXb3Jrc3BhY2VSZXNvbHV0aW9uJywgKCkgewogICAgbGF0ZSBMaXN0PGludD4gZXhpdENhbGxzOwogICAgbGF0ZSBIb29rQ29udGV4dCBjb250ZXh0OwogICAgbGF0ZSBMb2dnZXIgbG9nZ2VyOwogICAgbGF0ZSBEaXJlY3RvcnkgYnVpbGREaXJlY3Rvcnk7CiAgICBsYXRlIERpcmVjdG9yeSB3b3JraW5nRGlyZWN0b3J5OwoKICAgIHNldFVwKCgpIHsKICAgICAgZXhpdENhbGxzID0gW107CiAgICAgIGNvbnRleHQgPSBfTW9ja0hvb2tDb250ZXh0KCk7CiAgICAgIGxvZ2dlciA9IF9Nb2NrTG9nZ2VyKCk7CiAgICAgIGJ1aWxkRGlyZWN0b3J5ID0gRGlyZWN0b3J5LnN5c3RlbVRlbXAuY3JlYXRlVGVtcFN5bmMoJ2J1aWxkJyk7CiAgICAgIHdvcmtpbmdEaXJlY3RvcnkgPSBEaXJlY3Rvcnkuc3lzdGVtVGVtcC5jcmVhdGVUZW1wU3luYygnd29ya2luZycpOwoKICAgICAgd2hlbigoKSA9PiBjb250ZXh0LmxvZ2dlcikudGhlblJldHVybihsb2dnZXIpOwoKICAgICAgYWRkVGVhckRvd24oKCkgewogICAgICAgIGJ1aWxkRGlyZWN0b3J5LmRlbGV0ZSgpLmlnbm9yZSgpOwogICAgICAgIHdvcmtpbmdEaXJlY3RvcnkuZGVsZXRlKCkuaWdub3JlKCk7CiAgICAgIH0pOwogICAgfSk7CgogICAgZ3JvdXAoJ3doZW4gcHVic3BlYy55YW1sIGRvZXMgbm90IGV4aXN0JywgKCkgewogICAgICB0ZXN0KCdyZXR1cm5zIGZhbHNlJywgKCkgewogICAgICAgIGV4cGVjdCgKICAgICAgICAgIHVzZXNXb3Jrc3BhY2VSZXNvbHV0aW9uKAogICAgICAgICAgICBjb250ZXh0LAogICAgICAgICAgICB3b3JraW5nRGlyZWN0b3J5OiB3b3JraW5nRGlyZWN0b3J5LnBhdGgsCiAgICAgICAgICAgIGV4aXQ6IGV4aXRDYWxscy5hZGQsCiAgICAgICAgICApLAogICAgICAgICAgaXNGYWxzZSwKICAgICAgICApOwogICAgICB9KTsKICAgIH0pOwoKICAgIGdyb3VwKCd3aGVuIHB1YnNwZWMueWFtbCBpcyBtYWxmb3JtZWQnLCAoKSB7CiAgICAgIHNldFVwKCgpIHsKICAgICAgICBGaWxlKAogICAgICAgICAgcGF0aC5qb2luKHdvcmtpbmdEaXJlY3RvcnkucGF0aCwgJ3B1YnNwZWMueWFtbCcpLAogICAgICAgICkud3JpdGVBc1N0cmluZ1N5bmMoJ2ludmFsaWQgcHVic3BlYy55YW1sJyk7CiAgICAgIH0pOwoKICAgICAgdGVzdCgncmV0dXJucyBmYWxzZScsICgpIHsKICAgICAgICBleHBlY3QoCiAgICAgICAgICB1c2VzV29ya3NwYWNlUmVzb2x1dGlvbigKICAgICAgICAgICAgY29udGV4dCwKICAgICAgICAgICAgd29ya2luZ0RpcmVjdG9yeTogd29ya2luZ0RpcmVjdG9yeS5wYXRoLAogICAgICAgICAgICBleGl0OiBleGl0Q2FsbHMuYWRkLAogICAgICAgICAgKSwKICAgICAgICAgIGlzRmFsc2UsCiAgICAgICAgKTsKICAgICAgICBleHBlY3QoZXhpdENhbGxzLCBlcXVhbHMoWzFdKSk7CiAgICAgICAgdmVyaWZ5KCgpID0+IGxvZ2dlci5lcnIoYW55KHRoYXQ6IGNvbnRhaW5zKCdQYXJzZWRZYW1sRXhjZXB0aW9uJykpKSk7CiAgICAgIH0pOwogICAgfSk7CgogICAgZ3JvdXAoJ3doZW4gcHVic3BlYy55YW1sIGlzIHZhbGlkIHdpdGggbm8gcmVzb2x1dGlvbicsICgpIHsKICAgICAgc2V0VXAoKCkgewogICAgICAgIEZpbGUoCiAgICAgICAgICBwYXRoLmpvaW4od29ya2luZ0RpcmVjdG9yeS5wYXRoLCAncHVic3BlYy55YW1sJyksCiAgICAgICAgKS53cml0ZUFzU3RyaW5nU3luYygnJycKbmFtZTogXwonJycpOwogICAgICB9KTsKCiAgICAgIHRlc3QoJ3JldHVybnMgZmFsc2UnLCAoKSB7CiAgICAgICAgZXhwZWN0KAogICAgICAgICAgdXNlc1dvcmtzcGFjZVJlc29sdXRpb24oCiAgICAgICAgICAgIGNvbnRleHQsCiAgICAgICAgICAgIHdvcmtpbmdEaXJlY3Rvcnk6IHdvcmtpbmdEaXJlY3RvcnkucGF0aCwKICAgICAgICAgICAgZXhpdDogZXhpdENhbGxzLmFkZCwKICAgICAgICAgICksCiAgICAgICAgICBpc0ZhbHNlLAogICAgICAgICk7CiAgICAgICAgZXhwZWN0KGV4aXRDYWxscywgaXNFbXB0eSk7CiAgICAgICAgdmVyaWZ5TmV2ZXIoKCkgPT4gbG9nZ2VyLmVycihhbnkoKSkpOwogICAgICB9KTsKICAgIH0pOwoKICAgIGdyb3VwKCd3aGVuIHB1YnNwZWMueWFtbCBpcyB2YWxpZCB3aXRoIHJlc29sdXRpb24gd29ya3NwYWNlJywgKCkgewogICAgICBzZXRVcCgoKSB7CiAgICAgICAgRmlsZSgKICAgICAgICAgIHBhdGguam9pbih3b3JraW5nRGlyZWN0b3J5LnBhdGgsICdwdWJzcGVjLnlhbWwnKSwKICAgICAgICApLndyaXRlQXNTdHJpbmdTeW5jKCcnJwpuYW1lOiBfCnJlc29sdXRpb246IHdvcmtzcGFjZQonJycpOwogICAgICB9KTsKCiAgICAgIHRlc3QoJ3JldHVybnMgdHJ1ZScsICgpIHsKICAgICAgICBleHBlY3QoCiAgICAgICAgICB1c2VzV29ya3NwYWNlUmVzb2x1dGlvbigKICAgICAgICAgICAgY29udGV4dCwKICAgICAgICAgICAgd29ya2luZ0RpcmVjdG9yeTogd29ya2luZ0RpcmVjdG9yeS5wYXRoLAogICAgICAgICAgICBleGl0OiBleGl0Q2FsbHMuYWRkLAogICAgICAgICAgKSwKICAgICAgICAgIGlzVHJ1ZSwKICAgICAgICApOwogICAgICAgIGV4cGVjdChleGl0Q2FsbHMsIGlzRW1wdHkpOwogICAgICAgIHZlcmlmeU5ldmVyKCgpID0+IGxvZ2dlci5lcnIoYW55KCkpKTsKICAgICAgfSk7CiAgICB9KTsKICB9KTsKfQo=", "type": "text" } ],