UNPKG

@educrib/database

Version:
936 lines (865 loc) 260 kB
Object.defineProperty(exports, "__esModule", { value: true }); const { PrismaClientKnownRequestError, PrismaClientUnknownRequestError, PrismaClientRustPanicError, PrismaClientInitializationError, PrismaClientValidationError, NotFoundError, getPrismaClient, sqltag, empty, join, raw, Decimal, Debug, objectEnumValues, makeStrictEnum, Extensions, warnOnce, defineDmmfProperty, Public, } = require('./runtime/library') const Prisma = {} exports.Prisma = Prisma exports.$Enums = {} /** * Prisma Client JS version: 5.5.2 * Query Engine version: aebc046ce8b88ebbcb45efe31cbe7d06fd6abc0a */ Prisma.prismaVersion = { client: "5.5.2", engine: "aebc046ce8b88ebbcb45efe31cbe7d06fd6abc0a" } Prisma.PrismaClientKnownRequestError = PrismaClientKnownRequestError; Prisma.PrismaClientUnknownRequestError = PrismaClientUnknownRequestError Prisma.PrismaClientRustPanicError = PrismaClientRustPanicError Prisma.PrismaClientInitializationError = PrismaClientInitializationError Prisma.PrismaClientValidationError = PrismaClientValidationError Prisma.NotFoundError = NotFoundError Prisma.Decimal = Decimal /** * Re-export of sql-template-tag */ Prisma.sql = sqltag Prisma.empty = empty Prisma.join = join Prisma.raw = raw Prisma.validator = Public.validator /** * Extensions */ Prisma.getExtensionContext = Extensions.getExtensionContext Prisma.defineExtension = Extensions.defineExtension /** * Shorthand utilities for JSON filtering */ Prisma.DbNull = objectEnumValues.instances.DbNull Prisma.JsonNull = objectEnumValues.instances.JsonNull Prisma.AnyNull = objectEnumValues.instances.AnyNull Prisma.NullTypes = { DbNull: objectEnumValues.classes.DbNull, JsonNull: objectEnumValues.classes.JsonNull, AnyNull: objectEnumValues.classes.AnyNull } const path = require('path') /** * Enums */ exports.Prisma.TransactionIsolationLevel = makeStrictEnum({ ReadUncommitted: 'ReadUncommitted', ReadCommitted: 'ReadCommitted', RepeatableRead: 'RepeatableRead', Serializable: 'Serializable' }); exports.Prisma.VerticalScalarFieldEnum = { id: 'id', status: 'status', createdAt: 'createdAt', updatedAt: 'updatedAt', title: 'title', slug: 'slug', icon: 'icon', thumbnail: 'thumbnail', isFoundation: 'isFoundation' }; exports.Prisma.CategoryScalarFieldEnum = { id: 'id', status: 'status', createdAt: 'createdAt', updatedAt: 'updatedAt', title: 'title', slug: 'slug', icon: 'icon', thumbnail: 'thumbnail', verticalId: 'verticalId' }; exports.Prisma.TypeScalarFieldEnum = { id: 'id', status: 'status', createdAt: 'createdAt', updatedAt: 'updatedAt', title: 'title', slug: 'slug', icon: 'icon', thumbnail: 'thumbnail', verticalId: 'verticalId' }; exports.Prisma.CountryScalarFieldEnum = { id: 'id', status: 'status', createdAt: 'createdAt', updatedAt: 'updatedAt', title: 'title', slug: 'slug', alias: 'alias', code: 'code', locale: 'locale', currency: 'currency', flag: 'flag' }; exports.Prisma.LocationScalarFieldEnum = { id: 'id', status: 'status', createdAt: 'createdAt', updatedAt: 'updatedAt', title: 'title', slug: 'slug', alias: 'alias', shortAddress: 'shortAddress', area: 'area', region: 'region', state: 'state', countryId: 'countryId', profileId: 'profileId' }; exports.Prisma.CurrencyScalarFieldEnum = { id: 'id', status: 'status', createdAt: 'createdAt', updatedAt: 'updatedAt', title: 'title', code: 'code', slug: 'slug', icon: 'icon' }; exports.Prisma.ContactTypeScalarFieldEnum = { id: 'id', status: 'status', createdAt: 'createdAt', updatedAt: 'updatedAt', title: 'title', slug: 'slug', icon: 'icon', thumbnail: 'thumbnail' }; exports.Prisma.CurriculumScalarFieldEnum = { id: 'id', status: 'status', createdAt: 'createdAt', updatedAt: 'updatedAt', title: 'title', slug: 'slug', icon: 'icon', thumbnail: 'thumbnail' }; exports.Prisma.AccreditationScalarFieldEnum = { id: 'id', status: 'status', createdAt: 'createdAt', updatedAt: 'updatedAt', title: 'title', slug: 'slug', icon: 'icon', thumbnail: 'thumbnail', description: 'description', link: 'link' }; exports.Prisma.UniversityScalarFieldEnum = { id: 'id', status: 'status', createdAt: 'createdAt', updatedAt: 'updatedAt', title: 'title', slug: 'slug', icon: 'icon', thumbnail: 'thumbnail', description: 'description', link: 'link' }; exports.Prisma.ManagementScalarFieldEnum = { id: 'id', status: 'status', createdAt: 'createdAt', updatedAt: 'updatedAt', title: 'title', slug: 'slug', icon: 'icon', thumbnail: 'thumbnail', description: 'description', link: 'link' }; exports.Prisma.FacilityScalarFieldEnum = { id: 'id', status: 'status', createdAt: 'createdAt', updatedAt: 'updatedAt', title: 'title', slug: 'slug', icon: 'icon', thumbnail: 'thumbnail' }; exports.Prisma.DesignationScalarFieldEnum = { id: 'id', status: 'status', createdAt: 'createdAt', updatedAt: 'updatedAt', title: 'title', slug: 'slug', icon: 'icon', thumbnail: 'thumbnail' }; exports.Prisma.MediaScalarFieldEnum = { id: 'id', status: 'status', createdAt: 'createdAt', updatedAt: 'updatedAt', title: 'title', slug: 'slug', icon: 'icon', thumbnail: 'thumbnail' }; exports.Prisma.SocialScalarFieldEnum = { id: 'id', status: 'status', createdAt: 'createdAt', updatedAt: 'updatedAt', title: 'title', slug: 'slug', icon: 'icon', thumbnail: 'thumbnail' }; exports.Prisma.DurationTypeScalarFieldEnum = { id: 'id', status: 'status', createdAt: 'createdAt', updatedAt: 'updatedAt', title: 'title', slug: 'slug', icon: 'icon', thumbnail: 'thumbnail' }; exports.Prisma.FrequencyScalarFieldEnum = { id: 'id', status: 'status', createdAt: 'createdAt', updatedAt: 'updatedAt', title: 'title', slug: 'slug', icon: 'icon', thumbnail: 'thumbnail' }; exports.Prisma.IntakeScalarFieldEnum = { id: 'id', status: 'status', createdAt: 'createdAt', updatedAt: 'updatedAt', title: 'title', slug: 'slug', icon: 'icon', thumbnail: 'thumbnail' }; exports.Prisma.LevelScalarFieldEnum = { id: 'id', status: 'status', createdAt: 'createdAt', updatedAt: 'updatedAt', title: 'title', slug: 'slug', icon: 'icon', thumbnail: 'thumbnail' }; exports.Prisma.CourseScalarFieldEnum = { id: 'id', status: 'status', createdAt: 'createdAt', updatedAt: 'updatedAt', title: 'title', slug: 'slug', icon: 'icon', thumbnail: 'thumbnail', description: 'description', link: 'link' }; exports.Prisma.SpecializationScalarFieldEnum = { id: 'id', status: 'status', createdAt: 'createdAt', updatedAt: 'updatedAt', title: 'title', slug: 'slug', icon: 'icon', thumbnail: 'thumbnail', description: 'description', link: 'link' }; exports.Prisma.ProfileScalarFieldEnum = { id: 'id', status: 'status', createdAt: 'createdAt', updatedAt: 'updatedAt', title: 'title', alias: 'alias', slug: 'slug', avatar: 'avatar', thumbnail: 'thumbnail', description: 'description', code: 'code', establishedYear: 'establishedYear', verticalId: 'verticalId', managementId: 'managementId', universityId: 'universityId', typeId: 'typeId', curriculumId: 'curriculumId', profileImages: 'profileImages', featured: 'featured', recommended: 'recommended', verified: 'verified', published: 'published', views: 'views' }; exports.Prisma.SeoScalarFieldEnum = { id: 'id', status: 'status', createdAt: 'createdAt', updatedAt: 'updatedAt', title: 'title', description: 'description', keywords: 'keywords', canonical: 'canonical', thumbnail: 'thumbnail', profileId: 'profileId' }; exports.Prisma.ProfileCategoryScalarFieldEnum = { id: 'id', status: 'status', createdAt: 'createdAt', updatedAt: 'updatedAt', profileId: 'profileId', categoryId: 'categoryId' }; exports.Prisma.ProfileAccreditationScalarFieldEnum = { id: 'id', status: 'status', createdAt: 'createdAt', updatedAt: 'updatedAt', profileId: 'profileId', accreditationId: 'accreditationId' }; exports.Prisma.ProfileContactScalarFieldEnum = { id: 'id', status: 'status', createdAt: 'createdAt', updatedAt: 'updatedAt', title: 'title', phone: 'phone', email: 'email', website: 'website', contactTypeId: 'contactTypeId', profileId: 'profileId' }; exports.Prisma.ProfileStaffScalarFieldEnum = { id: 'id', status: 'status', createdAt: 'createdAt', updatedAt: 'updatedAt', avatar: 'avatar', title: 'title', designationId: 'designationId', profileId: 'profileId' }; exports.Prisma.ProfileStaffContactScalarFieldEnum = { id: 'id', status: 'status', createdAt: 'createdAt', updatedAt: 'updatedAt', title: 'title', phone: 'phone', email: 'email', website: 'website', contactTypeId: 'contactTypeId', profileStaffId: 'profileStaffId' }; exports.Prisma.ProfileProgrammeScalarFieldEnum = { id: 'id', status: 'status', createdAt: 'createdAt', updatedAt: 'updatedAt', avatar: 'avatar', thumbnail: 'thumbnail', courseId: 'courseId', specializationId: 'specializationId', profileId: 'profileId', intakeId: 'intakeId', capacity: 'capacity', levelId: 'levelId', duration: 'duration', durationTypeId: 'durationTypeId' }; exports.Prisma.ProfileProgrammeFeeScalarFieldEnum = { id: 'id', status: 'status', createdAt: 'createdAt', updatedAt: 'updatedAt', title: 'title', amount: 'amount', currencyId: 'currencyId', frequencyId: 'frequencyId', profileProgrammeId: 'profileProgrammeId' }; exports.Prisma.ProfileMediaScalarFieldEnum = { id: 'id', status: 'status', createdAt: 'createdAt', updatedAt: 'updatedAt', link: 'link', profileId: 'profileId', mediaId: 'mediaId' }; exports.Prisma.ProfileSocialScalarFieldEnum = { id: 'id', status: 'status', createdAt: 'createdAt', updatedAt: 'updatedAt', link: 'link', profileId: 'profileId', socialId: 'socialId' }; exports.Prisma.ProfileFacilityScalarFieldEnum = { id: 'id', status: 'status', createdAt: 'createdAt', updatedAt: 'updatedAt', profileId: 'profileId', facilityId: 'facilityId' }; exports.Prisma.ProfileReportScalarFieldEnum = { id: 'id', status: 'status', createdAt: 'createdAt', updatedAt: 'updatedAt', title: 'title', description: 'description', name: 'name', phone: 'phone', email: 'email', location: 'location', profileId: 'profileId' }; exports.Prisma.ProfileRequestScalarFieldEnum = { id: 'id', status: 'status', createdAt: 'createdAt', updatedAt: 'updatedAt', title: 'title', description: 'description', name: 'name', phone: 'phone', email: 'email', location: 'location', profileId: 'profileId' }; exports.Prisma.ProfileRelationScalarFieldEnum = { id: 'id', status: 'status', createdAt: 'createdAt', updatedAt: 'updatedAt', description: 'description', name: 'name', phone: 'phone', email: 'email', location: 'location', rating: 'rating', profileId: 'profileId' }; exports.Prisma.ProfileReviewScalarFieldEnum = { id: 'id', status: 'status', createdAt: 'createdAt', updatedAt: 'updatedAt', title: 'title', description: 'description', rating: 'rating', name: 'name', phone: 'phone', email: 'email', location: 'location', profileId: 'profileId' }; exports.Prisma.ProfileEventScalarFieldEnum = { id: 'id', status: 'status', createdAt: 'createdAt', updatedAt: 'updatedAt', title: 'title', slug: 'slug', description: 'description', avatar: 'avatar', thumbnail: 'thumbnail', location: 'location', startDate: 'startDate', endDate: 'endDate', images: 'images', website: 'website', profileId: 'profileId', typeId: 'typeId', categoryId: 'categoryId', featured: 'featured', recommended: 'recommended', verified: 'verified', published: 'published', views: 'views' }; exports.Prisma.ProfileEventTicketScalarFieldEnum = { id: 'id', status: 'status', createdAt: 'createdAt', updatedAt: 'updatedAt', title: 'title', amount: 'amount', currencyId: 'currencyId', profileEventId: 'profileEventId' }; exports.Prisma.ProfileHostelScalarFieldEnum = { id: 'id', status: 'status', createdAt: 'createdAt', updatedAt: 'updatedAt', title: 'title', slug: 'slug', description: 'description', avatar: 'avatar', thumbnail: 'thumbnail', location: 'location', typeId: 'typeId', categoryId: 'categoryId', currencyId: 'currencyId', images: 'images', website: 'website', facilities: 'facilities', profileId: 'profileId', featured: 'featured', recommended: 'recommended', verified: 'verified', published: 'published', views: 'views' }; exports.Prisma.ProfileHostelFeeScalarFieldEnum = { id: 'id', status: 'status', createdAt: 'createdAt', updatedAt: 'updatedAt', title: 'title', amount: 'amount', currencyId: 'currencyId', frequencyId: 'frequencyId', profileHostelId: 'profileHostelId' }; exports.Prisma.ProfileHostelFacilityScalarFieldEnum = { id: 'id', status: 'status', createdAt: 'createdAt', updatedAt: 'updatedAt', profileHostelId: 'profileHostelId', facilityId: 'facilityId' }; exports.Prisma.ProfileHostelContactScalarFieldEnum = { id: 'id', status: 'status', createdAt: 'createdAt', updatedAt: 'updatedAt', contactTypeId: 'contactTypeId', profileHostelId: 'profileHostelId' }; exports.Prisma.ProfileJobScalarFieldEnum = { id: 'id', status: 'status', createdAt: 'createdAt', updatedAt: 'updatedAt', title: 'title', slug: 'slug', description: 'description', avatar: 'avatar', thumbnail: 'thumbnail', location: 'location', duration: 'duration', durationTypeId: 'durationTypeId', domain: 'domain', remuneration: 'remuneration', currencyId: 'currencyId', accomodation: 'accomodation', benefits: 'benefits', profileId: 'profileId', website: 'website', featured: 'featured', recommended: 'recommended', verified: 'verified', published: 'published', views: 'views', categoryId: 'categoryId', typeId: 'typeId' }; exports.Prisma.ProfileJobRequestScalarFieldEnum = { id: 'id', status: 'status', createdAt: 'createdAt', updatedAt: 'updatedAt', name: 'name', phone: 'phone', email: 'email', location: 'location', cv: 'cv', profileJobId: 'profileJobId' }; exports.Prisma.ProfileInternshipScalarFieldEnum = { id: 'id', status: 'status', createdAt: 'createdAt', updatedAt: 'updatedAt', title: 'title', slug: 'slug', description: 'description', avatar: 'avatar', thumbnail: 'thumbnail', location: 'location', duration: 'duration', durationTypeId: 'durationTypeId', domain: 'domain', remuneration: 'remuneration', currencyId: 'currencyId', accomodation: 'accomodation', benefits: 'benefits', profileId: 'profileId', website: 'website', featured: 'featured', recommended: 'recommended', verified: 'verified', published: 'published', views: 'views', categoryId: 'categoryId', typeId: 'typeId' }; exports.Prisma.ProfileInternshipRequestScalarFieldEnum = { id: 'id', status: 'status', createdAt: 'createdAt', updatedAt: 'updatedAt', name: 'name', phone: 'phone', email: 'email', location: 'location', cv: 'cv', profileInternshipId: 'profileInternshipId' }; exports.Prisma.ProfileNewsScalarFieldEnum = { id: 'id', status: 'status', createdAt: 'createdAt', updatedAt: 'updatedAt', title: 'title', slug: 'slug', description: 'description', avatar: 'avatar', thumbnail: 'thumbnail', profileId: 'profileId', website: 'website', featured: 'featured', recommended: 'recommended', verified: 'verified', published: 'published', views: 'views' }; exports.Prisma.ProfileArticleScalarFieldEnum = { id: 'id', status: 'status', createdAt: 'createdAt', updatedAt: 'updatedAt', title: 'title', slug: 'slug', description: 'description', avatar: 'avatar', thumbnail: 'thumbnail', profileId: 'profileId', website: 'website', featured: 'featured', recommended: 'recommended', verified: 'verified', published: 'published', views: 'views' }; exports.Prisma.ProfileScholarshipScalarFieldEnum = { id: 'id', status: 'status', createdAt: 'createdAt', updatedAt: 'updatedAt', title: 'title', slug: 'slug', description: 'description', avatar: 'avatar', thumbnail: 'thumbnail', profileId: 'profileId', website: 'website', featured: 'featured', recommended: 'recommended', verified: 'verified', published: 'published', views: 'views' }; exports.Prisma.ProfilePlacementScalarFieldEnum = { id: 'id', status: 'status', createdAt: 'createdAt', updatedAt: 'updatedAt', title: 'title', slug: 'slug', description: 'description', avatar: 'avatar', thumbnail: 'thumbnail', profileId: 'profileId', website: 'website', featured: 'featured', recommended: 'recommended', verified: 'verified', published: 'published', views: 'views' }; exports.Prisma.ProfileRouteScalarFieldEnum = { id: 'id', status: 'status', createdAt: 'createdAt', updatedAt: 'updatedAt', title: 'title', slug: 'slug', avatar: 'avatar', thumbnail: 'thumbnail', name: 'name', phone: 'phone', description: 'description', code: 'code', time: 'time', plate: 'plate', profileId: 'profileId' }; exports.Prisma.SortOrder = { asc: 'asc', desc: 'desc' }; exports.Prisma.QueryMode = { default: 'default', insensitive: 'insensitive' }; exports.Prisma.NullsOrder = { first: 'first', last: 'last' }; exports.Prisma.ModelName = { vertical: 'vertical', category: 'category', type: 'type', country: 'country', location: 'location', currency: 'currency', contactType: 'contactType', curriculum: 'curriculum', accreditation: 'accreditation', university: 'university', management: 'management', facility: 'facility', designation: 'designation', media: 'media', social: 'social', durationType: 'durationType', frequency: 'frequency', intake: 'intake', level: 'level', course: 'course', specialization: 'specialization', profile: 'profile', seo: 'seo', profileCategory: 'profileCategory', profileAccreditation: 'profileAccreditation', profileContact: 'profileContact', profileStaff: 'profileStaff', profileStaffContact: 'profileStaffContact', profileProgramme: 'profileProgramme', profileProgrammeFee: 'profileProgrammeFee', profileMedia: 'profileMedia', profileSocial: 'profileSocial', profileFacility: 'profileFacility', profileReport: 'profileReport', profileRequest: 'profileRequest', profileRelation: 'profileRelation', profileReview: 'profileReview', profileEvent: 'profileEvent', profileEventTicket: 'profileEventTicket', profileHostel: 'profileHostel', profileHostelFee: 'profileHostelFee', profileHostelFacility: 'profileHostelFacility', profileHostelContact: 'profileHostelContact', profileJob: 'profileJob', profileJobRequest: 'profileJobRequest', profileInternship: 'profileInternship', profileInternshipRequest: 'profileInternshipRequest', profileNews: 'profileNews', profileArticle: 'profileArticle', profileScholarship: 'profileScholarship', profilePlacement: 'profilePlacement', profileRoute: 'profileRoute' }; /** * Create the Client */ const config = { "generator": { "name": "client", "provider": { "fromEnvVar": null, "value": "prisma-client-js" }, "output": { "value": "/Users/ajithmathew/Documents/educrib-ecosystem/educrib-database/client", "fromEnvVar": null }, "config": { "engineType": "library" }, "binaryTargets": [ { "fromEnvVar": null, "value": "darwin-arm64", "native": true } ], "previewFeatures": [], "isCustomOutput": true }, "relativeEnvPaths": { "rootEnvPath": "../.env", "schemaEnvPath": "../.env" }, "relativePath": "..", "clientVersion": "5.5.2", "engineVersion": "aebc046ce8b88ebbcb45efe31cbe7d06fd6abc0a", "datasourceNames": [ "db" ], "activeProvider": "postgresql", "inlineDatasources": { "db": { "url": { "fromEnvVar": "DATABASE_URL", "value": null } } }, "inlineSchema": "Z2VuZXJhdG9yIGNsaWVudCB7CiAgcHJvdmlkZXIgPSAicHJpc21hLWNsaWVudC1qcyIKICBvdXRwdXQgICA9ICIuL2NsaWVudCIKfQoKZGF0YXNvdXJjZSBkYiB7CiAgcHJvdmlkZXIgPSAicG9zdGdyZXNxbCIKICB1cmwgICAgICA9IGVudigiREFUQUJBU0VfVVJMIikKfQoKLy8gQm90aCBmb3VuZGF0aW9uIGFuZCBzcGluIG9mZiB2ZXJ0aWNhbHMgd2lsbCBiZSBhdmFpbGFibGUgYXMgYSAKLy8gc2VhcmNoIHZlcnRpY2FsIGluIEVkdWNyaWIgRGlzY292ZXIgZm9yIHRoZSBlbmQgdXNlci4gCi8vIENhdGVnb3JpZXMgYW5kIHR5cGVzIGNhbiBiZSBjcmVhdGVkIGFnYWluc3QgYWxsIDE2IHZlcnRpY2Fscy4gCgptb2RlbCB2ZXJ0aWNhbCB7CiAgaWQgICAgICAgICAgIFN0cmluZyAgICAgQGlkIEBkZWZhdWx0KGN1aWQoKSkKICBzdGF0dXMgICAgICAgQm9vbGVhbiAgICBAZGVmYXVsdCh0cnVlKQogIGNyZWF0ZWRBdCAgICBEYXRlVGltZSAgIEBkZWZhdWx0KG5vdygpKQogIHVwZGF0ZWRBdCAgICBEYXRlVGltZSAgIEB1cGRhdGVkQXQKICB0aXRsZSAgICAgICAgU3RyaW5nICAgICBAdW5pcXVlCiAgc2x1ZyAgICAgICAgIFN0cmluZyAgICAgQHVuaXF1ZQogIGljb24gICAgICAgICBTdHJpbmc/CiAgdGh1bWJuYWlsICAgIFN0cmluZz8KICBpc0ZvdW5kYXRpb24gQm9vbGVhbiAgICBAZGVmYXVsdCh0cnVlKSAvLyBGb3VuZGF0aW9uIHZlcnRpY2FscyBhcmUgdGhlIHZlcnRpY2FscyBmb3Igd2hpY2ggYSB1c2VyIGNhbiBjcmVhdGUgYSBwcm9maWxlCiAgY2F0ZWdvcmllcyAgIGNhdGVnb3J5W10KICB0eXBlcyAgICAgICAgdHlwZVtdCiAgcHJvZmlsZXMgICAgIHByb2ZpbGVbXQp9CgovLyBFYWNoIHZlcnRpY2FsIHdpbGwgaGF2ZSBtdWx0aXBsZSBjYXRlZ29yaWVzLiAKLy8gVXNlcnMgY2FuIGNyZWF0ZSBjYXRlZ29yaWVzIGFnYWluc3QgYSB2ZXJ0aWNhbCBpbiBFZHVjcmliIFZhdWx0LiAKLy8gRm9yIGV4YW1wbGUsIGNvbGxlZ2Ugd2lsbCBoYXZlIGVuZ2luZWVyaW5nLCBtZWRpY2FsIGV0YyBhcyBjYXRlZ29yaWVzLiAKLy8gTGlrZXdpc2UsIHNjaG9vbHMgd2lsbCBoYXZlIGVsZW1lbnRhcnksIGhpZ2ggc2Nob29sIGV0YyBhcyBjYXRlZ29yaWVzCgptb2RlbCBjYXRlZ29yeSB7CiAgaWQgICAgICAgICAgICAgICAgIFN0cmluZyAgICAgICAgICAgICAgQGlkIEBkZWZhdWx0KGN1aWQoKSkKICBzdGF0dXMgICAgICAgICAgICAgQm9vbGVhbiAgICAgICAgICAgICBAZGVmYXVsdCh0cnVlKQogIGNyZWF0ZWRBdCAgICAgICAgICBEYXRlVGltZSAgICAgICAgICAgIEBkZWZhdWx0KG5vdygpKQogIHVwZGF0ZWRBdCAgICAgICAgICBEYXRlVGltZSAgICAgICAgICAgIEB1cGRhdGVkQXQKICB0aXRsZSAgICAgICAgICAgICAgU3RyaW5nICAgICAgICAgICAgICBAdW5pcXVlCiAgc2x1ZyAgICAgICAgICAgICAgIFN0cmluZyAgICAgICAgICAgICAgQHVuaXF1ZQogIGljb24gICAgICAgICAgICAgICBTdHJpbmc/CiAgdGh1bWJuYWlsICAgICAgICAgIFN0cmluZz8KICB2ZXJ0aWNhbCAgICAgICAgICAgdmVydGljYWw/ICAgICAgICAgICBAcmVsYXRpb24oZmllbGRzOiBbdmVydGljYWxJZF0sIHJlZmVyZW5jZXM6IFtpZF0pCiAgdmVydGljYWxJZCAgICAgICAgIFN0cmluZz8KICBwcm9maWxlQ2F0ZWdvcmllcyAgcHJvZmlsZUNhdGVnb3J5W10KICBwcm9maWxlSm9icyAgICAgICAgcHJvZmlsZUpvYltdCiAgcHJvZmlsZUV2ZW50cyAgICAgIHByb2ZpbGVFdmVudFtdCiAgcHJvZmlsZUhvc3RlbHMgICAgIHByb2ZpbGVIb3N0ZWxbXQogIHByb2ZpbGVJbnRlcm5zaGlwcyBwcm9maWxlSW50ZXJuc2hpcFtdCn0KCi8vIEVhY2ggdmVydGljYWwgd2lsbCBoYXZlIG11bHRpcGxlIHR5cGVzLiAKLy8gVXNlcnMgY2FuIGNyZWF0ZSB0eXBlcyBhZ2FpbnN0IGEgdmVydGljYWwgaW4gRWR1Y3JpYiBWYXVsdC4gCi8vIEZvciBleGFtcGxlLCBjb2xsZWdlcyBhbmQgc2Nob29scyB3aWxsIGhhdmUgcHJpdmF0ZSwgZ292ZXJubWVudCBldGMgYXMgdHlwZXMuICAKCm1vZGVsIHR5cGUgewogIGlkICAgICAgICAgICAgICAgICBTdHJpbmcgICAgICAgICAgICAgIEBpZCBAZGVmYXVsdChjdWlkKCkpCiAgc3RhdHVzICAgICAgICAgICAgIEJvb2xlYW4gICAgICAgICAgICAgQGRlZmF1bHQodHJ1ZSkKICBjcmVhdGVkQXQgICAgICAgICAgRGF0ZVRpbWUgICAgICAgICAgICBAZGVmYXVsdChub3coKSkKICB1cGRhdGVkQXQgICAgICAgICAgRGF0ZVRpbWUgICAgICAgICAgICBAdXBkYXRlZEF0CiAgdGl0bGUgICAgICAgICAgICAgIFN0cmluZyAgICAgICAgICAgICAgQHVuaXF1ZQogIHNsdWcgICAgICAgICAgICAgICBTdHJpbmcgICAgICAgICAgICAgIEB1bmlxdWUKICBpY29uICAgICAgICAgICAgICAgU3RyaW5nPwogIHRodW1ibmFpbCAgICAgICAgICBTdHJpbmc/CiAgdmVydGljYWwgICAgICAgICAgIHZlcnRpY2FsPyAgICAgICAgICAgQHJlbGF0aW9uKGZpZWxkczogW3ZlcnRpY2FsSWRdLCByZWZlcmVuY2VzOiBbaWRdKQogIHZlcnRpY2FsSWQgICAgICAgICBTdHJpbmc/CiAgcHJvZmlsZXMgICAgICAgICAgIHByb2ZpbGVbXQogIHByb2ZpbGVIb3N0ZWxzICAgICBwcm9maWxlSG9zdGVsW10KICBwcm9maWxlSm9icyAgICAgICAgcHJvZmlsZUpvYltdCiAgcHJvZmlsZUV2ZW50cyAgICAgIHByb2ZpbGVFdmVudFtdCiAgcHJvZmlsZUludGVybnNoaXBzIHByb2ZpbGVJbnRlcm5zaGlwW10KfQoKLy8gQ291bnRyaWVzIHdpbGwgYmUgYWRkZWQgYmFzZWQgb24gZ2VvZ3JhcGhpY2FsIGV4cGFuc2lvbnMuCgptb2RlbCBjb3VudHJ5IHsKICBpZCAgICAgICAgU3RyaW5nICAgICBAaWQgQGRlZmF1bHQoY3VpZCgpKQogIHN0YXR1cyAgICBCb29sZWFuICAgIEBkZWZhdWx0KHRydWUpCiAgY3JlYXRlZEF0IERhdGVUaW1lICAgQGRlZmF1bHQobm93KCkpCiAgdXBkYXRlZEF0IERhdGVUaW1lICAgQHVwZGF0ZWRBdAogIHRpdGxlICAgICBTdHJpbmcgICAgIEB1bmlxdWUKICBzbHVnICAgICAgU3RyaW5nICAgICBAdW5pcXVlCiAgYWxpYXMgICAgIFN0cmluZz8gLy8gYWx0ZXJuYXRlIG5hbWUKICBjb2RlICAgICAgU3RyaW5nPwogIGxvY2FsZSAgICBTdHJpbmc/CiAgY3VycmVuY3kgIFN0cmluZz8KICBmbGFnICAgICAgU3RyaW5nPwogIGxvY2F0aW9ucyBsb2NhdGlvbltdCn0KCi8vIExvY2F0aW9uIHdpbGwgYmUgZm91bmRhdGlvbiBmb3Igc2VhcmNoIGFuZCBsaXN0aW5nIGZvciBFZHVjcmliIGVjb3N5c3RlbS4gCi8vIEVhY2ggbG9jYXRpb24gd2lsbCBhY3QgYXMgYSBtaWNybyBsb2NhdGlvbiB3aXRoIGxpc3RpbmdzIGZyb20gYWxsIHZlcnRpY2Fscy4KCm1vZGVsIGxvY2F0aW9uIHsKICBpZCAgICAgICAgICAgU3RyaW5nICAgQGlkIEBkZWZhdWx0KGN1aWQoKSkKICBzdGF0dXMgICAgICAgQm9vbGVhbiAgQGRlZmF1bHQodHJ1ZSkKICBjcmVhdGVkQXQgICAgRGF0ZVRpbWUgQGRlZmF1bHQobm93KCkpCiAgdXBkYXRlZEF0ICAgIERhdGVUaW1lIEB1cGRhdGVkQXQKICB0aXRsZSAgICAgICAgU3RyaW5nICAgQHVuaXF1ZQogIHNsdWcgICAgICAgICBTdHJpbmcgICBAdW5pcXVlCiAgYWxpYXMgICAgICAgIFN0cmluZz8gLy8gYWx0ZXJuYXRlIG5hbWUKICBzaG9ydEFkZHJlc3MgU3RyaW5nCiAgYXJlYSAgICAgICAgIFN0cmluZz8gLy8gbGV2ZWwgMQogIHJlZ2lvbiAgICAgICBTdHJpbmc/IC8vIGxldmVsIDIKICBzdGF0ZSAgICAgICAgU3RyaW5nPyAvLyBsZXZlbCAzCiAgY291bnRyeSAgICAgIGNvdW50cnk/IEByZWxhdGlvbihmaWVsZHM6IFtjb3VudHJ5SWRdLCByZWZlcmVuY2VzOiBbaWRdKQogIGNvdW50cnlJZCAgICBTdHJpbmc/CiAgcHJvZmlsZSAgICAgIHByb2ZpbGUgIEByZWxhdGlvbihmaWVsZHM6IFtwcm9maWxlSWRdLCByZWZlcmVuY2VzOiBbaWRdKQogIHByb2ZpbGVJZCAgICBTdHJpbmcgICBAdW5pcXVlCn0KCm1vZGVsIGN1cnJlbmN5IHsKICBpZCAgICAgICAgICAgICAgICAgICBTdHJpbmcgICAgICAgICAgICAgICAgQGlkIEBkZWZhdWx0KGN1aWQoKSkKICBzdGF0dXMgICAgICAgICAgICAgICBCb29sZWFuICAgICAgICAgICAgICAgQGRlZmF1bHQodHJ1ZSkKICBjcmVhdGVkQXQgICAgICAgICAgICBEYXRlVGltZSAgICAgICAgICAgICAgQGRlZmF1bHQobm93KCkpCiAgdXBkYXRlZEF0ICAgICAgICAgICAgRGF0ZVRpbWUgICAgICAgICAgICAgIEB1cGRhdGVkQXQKICB0aXRsZSAgICAgICAgICAgICAgICBTdHJpbmcgICAgICAgICAgICAgICAgQHVuaXF1ZQogIGNvZGUgICAgICAgICAgICAgICAgIFN0cmluZyAgICAgICAgICAgICAgICBAdW5pcXVlCiAgc2x1ZyAgICAgICAgICAgICAgICAgU3RyaW5nICAgICAgICAgICAgICAgIEB1bmlxdWUKICBpY29uICAgICAgICAgICAgICAgICBTdHJpbmc/CiAgcHJvZmlsZUhvc3RlbHMgICAgICAgcHJvZmlsZUhvc3RlbFtdCiAgcHJvZmlsZUpvYnMgICAgICAgICAgcHJvZmlsZUpvYltdCiAgcHJvZmlsZUludGVybnNoaXBzICAgcHJvZmlsZUludGVybnNoaXBbXQogIHByb2ZpbGVQcm9ncmFtbWVGZWVzIHByb2ZpbGVQcm9ncmFtbWVGZWVbXQogIHByb2ZpbGVIb3N0ZWxGZWVzICAgIHByb2ZpbGVIb3N0ZWxGZWVbXQogIHByb2ZpbGVFdmVudFRpY2tldHMgIHByb2ZpbGVFdmVudFRpY2tldFtdCn0KCm1vZGVsIGNvbnRhY3RUeXBlIHsKICBpZCAgICAgICAgICAgICAgICAgICAgU3RyaW5nICAgICAgICAgICAgICAgICBAaWQgQGRlZmF1bHQoY3VpZCgpKQogIHN0YXR1cyAgICAgICAgICAgICAgICBCb29sZWFuICAgICAgICAgICAgICAgIEBkZWZhdWx0KHRydWUpCiAgY3JlYXRlZEF0ICAgICAgICAgICAgIERhdGVUaW1lICAgICAgICAgICAgICAgQGRlZmF1bHQobm93KCkpCiAgdXBkYXRlZEF0ICAgICAgICAgICAgIERhdGVUaW1lICAgICAgICAgICAgICAgQHVwZGF0ZWRBdAogIHRpdGxlICAgICAgICAgICAgICAgICBTdHJpbmcgICAgICAgICAgICAgICAgIEB1bmlxdWUKICBzbHVnICAgICAgICAgICAgICAgICAgU3RyaW5nICAgICAgICAgICAgICAgICBAdW5pcXVlCiAgaWNvbiAgICAgICAgICAgICAgICAgIFN0cmluZz8KICB0aHVtYm5haWwgICAgICAgICAgICAgU3RyaW5nPwogIHByb2ZpbGVDb250YWN0cyAgICAgICBwcm9maWxlQ29udGFjdFtdCiAgcHJvZmlsZVN0YWZmQ29udGFjdHMgIHByb2ZpbGVTdGFmZkNvbnRhY3RbXQogIHByb2ZpbGVIb3N0ZWxDb250YWN0cyBwcm9maWxlSG9zdGVsQ29udGFjdFtdCn0KCm1vZGVsIGN1cnJpY3VsdW0gewogIGlkICAgICAgICBTdHJpbmcgICAgQGlkIEBkZWZhdWx0KGN1aWQoKSkKICBzdGF0dXMgICAgQm9vbGVhbiAgIEBkZWZhdWx0KHRydWUpCiAgY3JlYXRlZEF0IERhdGVUaW1lICBAZGVmYXVsdChub3coKSkKICB1cGRhdGVkQXQgRGF0ZVRpbWUgIEB1cGRhdGVkQXQKICB0aXRsZSAgICAgU3RyaW5nICAgIEB1bmlxdWUKICBzbHVnICAgICAgU3RyaW5nICAgIEB1bmlxdWUKICBpY29uICAgICAgU3RyaW5nPwogIHRodW1ibmFpbCBTdHJpbmc/CiAgcHJvZmlsZXMgIHByb2ZpbGVbXQp9Cgptb2RlbCBhY2NyZWRpdGF0aW9uIHsKICBpZCAgICAgICAgICAgICAgICAgICBTdHJpbmcgICAgICAgICAgICAgICAgIEBpZCBAZGVmYXVsdChjdWlkKCkpCiAgc3RhdHVzICAgICAgICAgICAgICAgQm9vbGVhbiAgICAgICAgICAgICAgICBAZGVmYXVsdCh0cnVlKQogIGNyZWF0ZWRBdCAgICAgICAgICAgIERhdGVUaW1lICAgICAgICAgICAgICAgQGRlZmF1bHQobm93KCkpCiAgdXBkYXRlZEF0ICAgICAgICAgICAgRGF0ZVRpbWUgICAgICAgICAgICAgICBAdXBkYXRlZEF0CiAgdGl0bGUgICAgICAgICAgICAgICAgU3RyaW5nICAgICAgICAgICAgICAgICBAdW5pcXVlCiAgc2x1ZyAgICAgICAgICAgICAgICAgU3RyaW5nICAgICAgICAgICAgICAgICBAdW5pcXVlCiAgaWNvbiAgICAgICAgICAgICAgICAgU3RyaW5nPwogIHRodW1ibmFpbCAgICAgICAgICAgIFN0cmluZz8KICBkZXNjcmlwdGlvbiAgICAgICAgICBTdHJpbmc/CiAgbGluayAgICAgICAgICAgICAgICAgU3RyaW5nPyAvLyBsaW5rIHRvIG9mZmljaWFsIHdlYnNpdGUKICBwcm9maWxlQWNjcmVkaXRhdGlvbiBwcm9maWxlQWNjcmVkaXRhdGlvbltdCn0KCm1vZGVsIHVuaXZlcnNpdHkgewogIGlkICAgICAgICAgIFN0cmluZyAgICBAaWQgQGRlZmF1bHQoY3VpZCgpKQogIHN0YXR1cyAgICAgIEJvb2xlYW4gICBAZGVmYXVsdCh0cnVlKQogIGNyZWF0ZWRBdCAgIERhdGVUaW1lICBAZGVmYXVsdChub3coKSkKICB1cGRhdGVkQXQgICBEYXRlVGltZSAgQHVwZGF0ZWRBdAogIHRpdGxlICAgICAgIFN0cmluZyAgICBAdW5pcXVlCiAgc2x1ZyAgICAgICAgU3RyaW5nICAgIEB1bmlxdWUKICBpY29uICAgICAgICBTdHJpbmc/CiAgdGh1bWJuYWlsICAgU3RyaW5nPwogIGRlc2NyaXB0aW9uIFN0cmluZz8KICBsaW5rICAgICAgICBTdHJpbmc/IC8vIGxpbmsgdG8gb2ZmaWNpYWwgd2Vic2l0ZQogIHByb2ZpbGVzICAgIHByb2ZpbGVbXQp9Cgptb2RlbCBtYW5hZ2VtZW50IHsKICBpZCAgICAgICAgICBTdHJpbmcgICAgQGlkIEBkZWZhdWx0KGN1aWQoKSkKICBzdGF0dXMgICAgICBCb29sZWFuICAgQGRlZmF1bHQodHJ1ZSkKICBjcmVhdGVkQXQgICBEYXRlVGltZSAgQGRlZmF1bHQobm93KCkpCiAgdXBkYXRlZEF0ICAgRGF0ZVRpbWUgIEB1cGRhdGVkQXQKICB0aXRsZSAgICAgICBTdHJpbmcgICAgQHVuaXF1ZQogIHNsdWcgICAgICAgIFN0cmluZyAgICBAdW5pcXVlCiAgaWNvbiAgICAgICAgU3RyaW5nPwogIHRodW1ibmFpbCAgIFN0cmluZz8KICBkZXNjcmlwdGlvbiBTdHJpbmc/CiAgbGluayAgICAgICAgU3RyaW5nPyAvLyBsaW5rIHRvIG9mZmljaWFsIHdlYnNpdGUKICBwcm9maWxlcyAgICBwcm9maWxlW10KfQoKbW9kZWwgZmFjaWxpdHkgewogIGlkICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyAgICAgICAgICAgICAgICAgIEBpZCBAZGVmYXVsdChjdWlkKCkpCiAgc3RhdHVzICAgICAgICAgICAgICAgICAgQm9vbGVhbiAgICAgICAgICAgICAgICAgQGRlZmF1bHQodHJ1ZSkKICBjcmVhdGVkQXQgICAgICAgICAgICAgICBEYXRlVGltZSAgICAgICAgICAgICAgICBAZGVmYXVsdChub3coKSkKICB1cGRhdGVkQXQgICAgICAgICAgICAgICBEYXRlVGltZSAgICAgICAgICAgICAgICBAdXBkYXRlZEF0CiAgdGl0bGUgICAgICAgICAgICAgICAgICAgU3RyaW5nICAgICAgICAgICAgICAgICAgQHVuaXF1ZQogIHNsdWcgICAgICAgICAgICAgICAgICAgIFN0cmluZyAgICAgICAgICAgICAgICAgIEB1bmlxdWUKICBpY29uICAgICAgICAgICAgICAgICAgICBTdHJpbmc/CiAgdGh1bWJuYWlsICAgICAgICAgICAgICAgU3RyaW5nPwogIHByb2ZpbGVGYWNpbGl0aWVzICAgICAgIHByb2ZpbGVGYWNpbGl0eVtdCiAgcHJvZmlsZUhvc3RlbEZhY2lsaXRpZXMgcHJvZmlsZUhvc3RlbEZhY2lsaXR5W10KfQoKbW9kZWwgZGVzaWduYXRpb24gewogIGlkICAgICAgICAgICAgU3RyaW5nICAgICAgICAgQGlkIEBkZWZhdWx0KGN1aWQoKSkKICBzdGF0dXMgICAgICAgIEJvb2xlYW4gICAgICAgIEBkZWZhdWx0KHRydWUpCiAgY3JlYXRlZEF0ICAgICBEYXRlVGltZSAgICAgICBAZGVmYXVsdChub3coKSkKICB1cGRhdGVkQXQgICAgIERhdGVUaW1lICAgICAgIEB1cGRhdGVkQXQKICB0aXRsZSAgICAgICAgIFN0cmluZyAgICAgICAgIEB1bmlxdWUKICBzbHVnICAgICAgICAgIFN0cmluZyAgICAgICAgIEB1bmlxdWUKICBpY29uICAgICAgICAgIFN0cmluZz8KICB0aHVtYm5haWwgICAgIFN0cmluZz8KICBwcm9maWxlU3RhZmZzIHByb2ZpbGVTdGFmZltdCn0KCm1vZGVsIG1lZGlhIHsKICBpZCAgICAgICAgICAgU3RyaW5nICAgICAgICAgQGlkIEBkZWZhdWx0KGN1aWQoKSkKICBzdGF0dXMgICAgICAgQm9vbGVhbiAgICAgICAgQGRlZmF1bHQodHJ1ZSkKICBjcmVhdGVkQXQgICAgRGF0ZVRpbWUgICAgICAgQGRlZmF1bHQobm93KCkpCiAgdXBkYXRlZEF0ICAgIERhdGVUaW1lICAgICAgIEB1cGRhdGVkQXQKICB0aXRsZSAgICAgICAgU3RyaW5nICAgICAgICAgQHVuaXF1ZQogIHNsdWcgICAgICAgICBTdHJpbmcgICAgICAgICBAdW5pcXVlCiAgaWNvbiAgICAgICAgIFN0cmluZz8KICB0aHVtYm5haWwgICAgU3RyaW5nPwogIHByb2ZpbGVNZWRpYSBwcm9maWxlTWVkaWFbXQp9Cgptb2RlbCBzb2NpYWwgewogIGlkICAgICAgICAgICAgU3RyaW5nICAgICAgICAgIEBpZCBAZGVmYXVsdChjdWlkKCkpCiAgc3RhdHVzICAgICAgICBCb29sZWFuICAgICAgICAgQGRlZmF1bHQodHJ1ZSkKICBjcmVhdGVkQXQgICAgIERhdGVUaW1lICAgICAgICBAZGVmYXVsdChub3coKSkKICB1cGRhdGVkQXQgICAgIERhdGVUaW1lICAgICAgICBAdXBkYXRlZEF0CiAgdGl0bGUgICAgICAgICBTdHJpbmcgICAgICAgICAgQHVuaXF1ZQogIHNsdWcgICAgICAgICAgU3RyaW5nICAgICAgICAgIEB1bmlxdWUKICBpY29uICAgICAgICAgIFN0cmluZz8KICB0aHVtYm5haWwgICAgIFN0cmluZz8KICBwcm9maWxlU29jaWFsIHByb2ZpbGVTb2NpYWxbXQp9Cgptb2RlbCBkdXJhdGlvblR5cGUgewogIGlkICAgICAgICAgICAgICAgICBTdHJpbmcgICAgICAgICAgICAgIEBpZCBAZGVmYXVsdChjdWlkKCkpCiAgc3RhdHVzICAgICAgICAgICAgIEJvb2xlYW4gICAgICAgICAgICAgQGRlZmF1bHQodHJ1ZSkKICBjcmVhdGVkQXQgICAgICAgICAgRGF0ZVRpbWUgICAgICAgICAgICBAZGVmYXVsdChub3coKSkKICB1cGRhdGVkQXQgICAgICAgICAgRGF0ZVRpbWUgICAgICAgICAgICBAdXBkYXRlZEF0CiAgdGl0bGUgICAgICAgICAgICAgIFN0cmluZyAgICAgICAgICAgICAgQHVuaXF1ZQogIHNsdWcgICAgICAgICAgICAgICBTdHJpbmcgICAgICAgICAgICAgIEB1bmlxdWUKICBpY29uICAgICAgICAgICAgICAgU3RyaW5nPwogIHRodW1ibmFpbCAgICAgICAgICBTdHJpbmc/CiAgcHJvZmlsZVByb2dyYW1tZXMgIHByb2ZpbGVQcm9ncmFtbWVbXQogIHByb2ZpbGVKb2JzICAgICAgICBwcm9maWxlSm9iW10KICBwcm9maWxlSW50ZXJuc2hpcHMgcHJvZmlsZUludGVybnNoaXBbXQp9Cgptb2RlbCBmcmVxdWVuY3kgewogIGlkICAgICAgICAgICAgICAgICAgIFN0cmluZyAgICAgICAgICAgICAgICBAaWQgQGRlZmF1bHQoY3VpZCgpKQogIHN0YXR1cyAgICAgICAgICAgICAgIEJvb2xlYW4gICAgICAgICAgICAgICBAZGVmYXVsdCh0cnVlKQogIGNyZWF0ZWRBdCAgICAgICAgICAgIERhdGVUaW1lICAgICAgICAgICAgICBAZGVmYXVsdChub3coKSkKICB1cGRhdGVkQXQgICAgICAgICAgICBEYXRlVGltZSAgICAgICAgICAgICAgQHVwZGF0ZWRBdAogIHRpdGxlICAgICAgICAgICAgICAgIFN0cmluZyAgICAgICAgICAgICAgICBAdW5pcXVlCiAgc2x1ZyAgICAgICAgICAgICAgICAgU3RyaW5nICAgICAgICAgICAgICAgIEB1bmlxdWUKICBpY29uICAgICAgICAgICAgICAgICBTdHJpbmc/CiAgdGh1bWJuYWlsICAgICAgICAgICAgU3RyaW5nPwogIHByb2ZpbGVQcm9ncmFtbWVGZWVzIHByb2ZpbGVQcm9ncmFtbWVGZWVbXQogIHByb2ZpbGVIb3N0ZWxGZWVzICAgIHByb2ZpbGVIb3N0ZWxGZWVbXQp9Cgptb2RlbCBpbnRha2UgewogIGlkICAgICAgICAgICAgICAgIFN0cmluZyAgICAgICAgICAgICBAaWQgQGRlZmF1bHQoY3VpZCgpKQogIHN0YXR1cyAgICAgICAgICAgIEJvb2xlYW4gICAgICAgICAgICBAZGVmYXVsdCh0cnVlKQogIGNyZWF0ZWRBdCAgICAgICAgIERhdGVUaW1lICAgICAgICAgICBAZGVmYXVsdChub3coKSkKICB1cGRhdGVkQXQgICAgICAgICBEYXRlVGltZSAgICAgICAgICAgQHVwZGF0ZWRBdAogIHRpdGxlICAgICAgICAgICAgIFN0cmluZyAgICAgICAgICAgICBAdW5pcXVlCiAgc2x1ZyAgICAgICAgICAgICAgU3RyaW5nICAgICAgICAgICAgIEB1bmlxdWUKICBpY29uICAgICAgICAgICAgICBTdHJpbmc/CiAgdGh1bWJuYWlsICAgICAgICAgU3RyaW5nPwogIHByb2ZpbGVQcm9ncmFtbWVzIHByb2ZpbGVQcm9ncmFtbWVbXQp9Cgptb2RlbCBsZXZlbCB7CiAgaWQgICAgICAgICAgICAgICAgU3RyaW5nICAgICAgICAgICAgIEBpZCBAZGVmYXVsdChjdWlkKCkpCiAgc3RhdHVzICAgICAgICAgICAgQm9vbGVhbiAgICAgICAgICAgIEBkZWZhdWx0KHRydWUpCiAgY3JlYXRlZEF0ICAgICAgICAgRGF0ZVRpbWUgICAgICAgICAgIEBkZWZhdWx0KG5vdygpKQogIHVwZGF0ZWRBdCAgICAgICAgIERhdGVUaW1lICAgICAgICAgICBAdXBkYXRlZEF0CiAgdGl0bGUgICAgICAgICAgICAgU3RyaW5nICAgICAgICAgICAgIEB1bmlxdWUKICBzbHVnICAgICAgICAgICAgICBTdHJpbmcgICAgICAgICAgICAgQHVuaXF1ZQogIGljb24gICAgICAgICAgICAgIFN0cmluZz8KICB0aHVtYm5haWwgICAgICAgICBTdHJpbmc/CiAgcHJvZmlsZVByb2dyYW1tZXMgcHJvZmlsZVByb2dyYW1tZVtdCn0KCm1vZGVsIGNvdXJzZSB7CiAgaWQgICAgICAgICAgICAgICAgU3RyaW5nICAgICAgICAgICAgIEBpZCBAZGVmYXVsdChjdWlkKCkpCiAgc3RhdHVzICAgICAgICAgICAgQm9vbGVhbiAgICAgICAgICAgIEBkZWZhdWx0KHRydWUpCiAgY3JlYXRlZEF0ICAgICAgICAgRGF0ZVRpbWUgICAgICAgICAgIEBkZWZhdWx0KG5vdygpKQogIHVwZGF0ZWRBdCAgICAgICAgIERhdGVUaW1lICAgICAgICAgICBAdXBkYXRlZEF0CiAgdGl0bGUgICAgICAgICAgICAgU3RyaW5nICAgICAgICAgICAgIEB1bmlxdWUKICBzbHVnICAgICAgICAgICAgICBTdHJpbmcgICAgICAgICAgICAgQHVuaXF1ZQogIGljb24gICAgICAgICAgICAgIFN0cmluZz8KICB0aHVtYm5haWwgICAgICAgICBTdHJpbmc/CiAgZGVzY3JpcHRpb24gICAgICAgU3RyaW5nPwogIGxpbmsgICAgICAgICAgICAgIFN0cmluZz8gLy8gbGluayB0byBvZmZpY2lhbCB3ZWJzaXRlCiAgcHJvZmlsZVByb2dyYW1tZXMgcHJvZmlsZVByb2dyYW1tZVtdCn0KCm1vZGVsIHNwZWNpYWxpemF0aW9uIHsKICBpZCAgICAgICAgICAgICAgICBTdHJpbmcgICAgICAgICAgICAgQGlkIEBkZWZhdWx0KGN1aWQoKSkKICBzdGF0dXMgICAgICAgICAgICBCb29sZWFuICAgICAgICAgICAgQGRlZmF1bHQodHJ1ZSkKICBjcmVhdGVkQXQgICAgICAgICBEYXRlVGltZSAgICAgICAgICAgQGRlZmF1bHQobm93KCkpCiAgdXBkYXRlZEF0ICAgICAgICAgRGF0ZVRpbWUgICAgICAgICAgIEB1cGRhdGVkQXQKICB0aXRsZSAgICAgICAgICAgICBTdHJpbmcgICAgICAgICAgICAgQHVuaXF1ZQogIHNsdWcgICAgICAgICAgICAgIFN0cmluZyAgICAgICAgICAgICBAdW5pcXVlCiAgaWNvbiAgICAgICAgICAgICAgU3RyaW5nPwogIHRodW1ibmFpbCAgICAgICAgIFN0cmluZz8KICBkZXNjcmlwdGlvbiAgICAgICBTdHJpbmc/CiAgbGluayAgICAgICAgICAgICAgU3RyaW5nPyAvLyBsaW5rIHRvIG9mZmljaWFsIHdlYnNpdGUKICBwcm9maWxlUHJvZ3JhbW1lcyBwcm9maWxlUHJvZ3JhbW1lW10KfQoKbW9kZWwgcHJvZmlsZSB7CiAgaWQgICAgICAgICAgICAgICAgICAgIFN0cmluZyAgICAgICAgICAgICAgICAgQGlkIEBkZWZhdWx0KGN1aWQoKSkKICBzdGF0dXMgICAgICAgICAgICAgICAgQm9vbGVhbiAgICAgICAgICAgICAgICBAZGVmYXVsdCh0cnVlKQogIGNyZWF0ZWRBdCAgICAgICAgICAgICBEYXRlVGltZSAgICAgICAgICAgICAgIEBkZWZhdWx0KG5vdygpKQogIHVwZGF0ZWRBdCAgICAgICAgICAgICBEYXRlVGltZSAgICAgICAgICAgICAgIEB1cGRhdGVkQXQKICB0aXRsZSAgICAgICAgICAgICAgICAgU3RyaW5nICAgICAgICAgICAgICAgICBAdW5pcXVlCiAgYWxpYXMgICAgICAgICAgICAgICAgIFN0cmluZz8KICBzbHVnICAgICAgICAgICAgICAgICAgU3RyaW5nICAgICAgICAgICAgICAgICBAdW5pcXVlCiAgYXZhdGFyICAgICAgICAgICAgICAgIFN0cmluZz8KICB0aHVtYm5haWwgICAgICAgICAgICAgU3RyaW5nPwogIGRlc2NyaXB0aW9uICAgICAgICAgICBTdHJpbmc/CiAgY29kZSAgICAgICAgICAgICAgICAgIFN0cmluZz8KICBlc3RhYmxpc2hlZFllYXIgICAgICAgSW50PwogIHByb2ZpbGVTZW8gICAgICAgICAgICBzZW8/CiAgbG9jYXRpb24gICAgICAgICAgICAgIGxvY2F0aW9uPwogIHZlcnRpY2FsICAgICAgICAgICAgICB2ZXJ0aWNhbD8gICAgICAgICAgICAgIEByZWxhdGlvbihmaWVsZHM6IFt2ZXJ0aWNhbElkXSwgcmVmZXJlbmNlczogW2lkXSkKICB2ZXJ0aWNhbElkICAgICAgICAgICAgU3RyaW5nPwogIHByb2ZpbGVDYXRlZ29yaWVzICAgICBwcm9maWxlQ2F0ZWdvcnlbXQogIHByb2ZpbGVBY2NyZWRpdGF0aW9ucyBwcm9maWxlQWNjcmVkaXRhdGlvbltdCiAgbWFuYWdlbWVudCAgICAgICAgICAgIG1hbmFnZW1lbnQ/ICAgICAgICAgICAgQHJlbGF0aW9uKGZpZWxkczogW21hbmFnZW1lbnRJZF0sIHJlZmVyZW5jZXM6IFtpZF0pCiAgbWFuYWdlbWVudElkICAgICAgICAgIFN0cmluZz8KICB1bml2ZXJzaXR5ICAgICAgICAgICAgdW5pdmVyc2l0eT8gICAgICAgICAgICBAcmVsYXRpb24oZmllbGRzOiBbdW5pdmVyc2l0eUlkXSwgcmVmZXJlbmNlczogW2lkXSkKICB1bml2ZXJzaXR5SWQgICAgICAgICAgU3RyaW5nPwogIHR5cGUgICAgICAgICAgICAgICAgICB0eXBlPyAgICAgICAgICAgICAgICAgIEByZWxhdGlvbihmaWVsZHM6IFt0eXBlSWRdLCByZWZlcmVuY2VzOiBbaWRdKQogIHR5cGVJZCAgICAgICAgICAgICAgICBTdHJpbmc/CiAgY3VycmljdWx1bSAgICAgICAgICAgIGN1cnJpY3VsdW0/ICAgICAgICAgICAgQHJlbGF0aW9uKGZpZWxkczogW2N1cnJpY3VsdW1JZF0sIHJlZmVyZW5jZXM6IFtpZF0pCiAgY3VycmljdWx1bUlkICAgICAgICAgIFN0cmluZz8KICBwcm9maWxlQ29udGFjdHMgICAgICAgcHJvZmlsZUNvbnRhY3RbXQogIHByb2ZpbGVTdGFmZnMgICAgICAgICBwcm9maWxlU3RhZmZbXQogIHByb2ZpbGVQcm9ncmFtbWVzICAgICBwcm9maWxlUHJvZ3JhbW1lW10KICBwcm9maWxlSW1hZ2VzICAgICAgICAgU3RyaW5nW10KICBwcm9maWxlTWVkaWEgICAgICAgICAgcHJvZmlsZU1lZGlhW10KICBwcm9maWxlU29jaWFscyAgICAgICAgcHJvZmlsZVNvY2lhbFtdCiAgcHJvZmlsZVJlcG9ydHMgICAgICAgIHByb2ZpbGVSZXBvcnRbXQogIHByb2ZpbGVSZXF1ZXN0cyAgICAgICBwcm9maWxlUmVxdWVzdFtdCiAgcHJvZmlsZVJlbGF0aW9ucyAgICAgIHByb2ZpbGVSZWxhdGlvbltdCiAgcHJvZmlsZVJldmlld3MgICAgICAgIHByb2ZpbGVSZXZpZXdbXQogIHByb2ZpbGVFdmVudHMgICAgICAgICBwcm9maWxlRXZlbnRbXQogIHByb2ZpbGVIb3N0ZWxzICAgICAgICBwcm9maWxlSG9zdGVsW10KICBwcm9maWxlSm9icyAgICAgICAgICAgcHJvZmlsZUpvYltdCiAgcHJvZmlsZU5ld3MgICAgICAgICAgIHByb2ZpbGVOZXdzW10KICBwcm9maWxlQXJ0aWNsZXMgICAgICAgcHJvZmlsZUFydGljbGVbXQogIHByb2ZpbGVTY2hvbGFyc2hpcHMgICBwcm9maWxlU2Nob2xhcnNoaXBbXQogIHByb2ZpbGVQbGFjZW1lbnRzICAgICBwcm9maWxlUGxhY2VtZW50W10KICBwcm9maWxlSW50ZXJuc2hpcHMgICAgcHJvZmlsZUludGVybnNoaXBbXQogIHByb2ZpbGVGYWNpbGl0aWVzICAgICBwcm9maWxlRmFjaWxpdHlbXQogIHByb2ZpbGVSb3V0ZXMgICAgICAgICBwcm9maWxlUm91dGVbXQogIGZlYXR1cmVkICAgICAgICAgICAgICBCb29sZWFuICAgICAgICAgICAgICAgIEBkZWZhdWx0KGZhbHNlKQogIHJlY29tbWVuZGVkICAgICAgICAgICBCb29sZWFuICAgICAgICAgICAgICAgIEBkZWZhdWx0KGZhbHNlKQogIHZlcmlmaWVkICAgICAgICAgICAgICBCb29sZWFuICAgICAgICAgICAgICAgIEBkZWZhdWx0KGZhbHNlKQogIHB1Ymxpc2hlZCAgICAgICAgICAgICBCb29sZWFuICAgICAgICAgICAgICAgIEBkZWZhdWx0KGZhbHNlKQogIHZpZXdzICAgICAgICAgICAgICAgICBJbnQgICAgICAgICAgICAgICAgICAgIEBkZWZhdWx0KDEpCn0KCm1vZGVsIHNlbyB7CiAgaWQgICAgICAgICAgU3RyaW5nICAgQGlkIEBkZWZhdWx0KGN1aWQoKSkKICBzdGF0dXMgICAgICBCb29sZWFuICBAZGVmYXVsdCh0cnVlKQogIGNyZWF0ZWRBdCAgIERhdGVUaW1lIEBkZWZhdWx0KG5vdygpKQogIHVwZGF0ZWRBdCAgIERhdGVUaW1lIEB1cGRhdGVkQXQKICB0aXRsZSAgICAgICBTdHJpbmc/CiAgZGVzY3JpcHRpb24gU3RyaW5nPwogIGtleXdvcmRzICAgIFN0cmluZ1tdCiAgY2Fub25pY2FsICAgU3RyaW5nPwogIHRodW1ibmFpbCAgIFN0cmluZz8KICBwcm9maWxlICAgICBwcm9maWxlICBAcmVsYXRpb24oZmllbGRzOiBbcHJvZmlsZUlkXSwgcmVmZXJlbmNlczogW2lkXSkKICBwcm9maWxlSWQgICBTdHJpbmcgICBAdW5pcXVlCn0KCm1vZGVsIHByb2ZpbGVDYXRlZ29yeSB7CiAgaWQgICAgICAgICBTdHJpbmcgICAgQGlkIEBkZWZhdWx0KGN1aWQoKSkKICBzdGF0dXMgICAgIEJvb2xlYW4gICBAZGVmYXVsdCh0cnVlKQogIGNyZWF0ZWRBdCAgRGF0ZVRpbWUgIEBkZWZhdWx0KG5vdygpKQogIHVwZGF0ZWRBdCAgRGF0ZVRpbWUgIEB1cGRhdGVkQXQKICBwcm9maWxlICAgIHByb2ZpbGU/ICBAcmVsYXRpb24oZmllbGRzOiBbcHJvZmlsZUlkXSwgcmVmZXJlbmNlczogW2lkXSkKICBwcm9maWxlSWQgIFN0cmluZz8KICBjYXRlZ29yeSAgIGNhdGVnb3J5PyBAcmVsYXRpb24oZmllbGRzOiBbY2F0ZWdvcnlJZF0sIHJlZmVyZW5jZXM6IFtpZF0pCiAgY2F0ZWdvcnlJZCBTdHJpbmc/Cn0KCm1vZGVsIHByb2ZpbGVBY2NyZWRpdGF0aW9uIHsKICBpZCAgICAgICAgICAgICAgU3RyaW5nICAgICAgICAgQGlkIEBkZWZhdWx0KGN1aWQoKSkKICBzdGF0dXMgICAgICAgICAgQm9vbGVhbiAgICAgICAgQGRlZmF1bHQodHJ1ZSkKICBjcmVhdGVkQXQgICAgICAgRGF0ZVRpbWUgICAgICAgQGRlZmF1bHQobm93KCkpCiAgdXBkYXRlZEF0ICAgICAgIERhdGVUaW1lICAgICAgIEB1cGRhdGVkQXQKICBwcm9maWxlICAgICAgICAgcHJvZmlsZT8gICAgICAgQHJlbGF0aW9uKGZpZWxkczogW3Byb2ZpbGVJZF0sIHJlZmVyZW5jZXM6IFtpZF0pCiAgcHJvZmlsZUlkICAgICAgIFN0cmluZz8KICBhY2NyZWRpdGF0aW9uICAgYWNjcmVkaXRhdGlvbj8gQHJlbGF0aW9uKGZpZWxkczogW2FjY3JlZGl0YXRpb25JZF0sIHJlZmVyZW5jZXM6IFtpZF0pCiAgYWNjcmVkaXRhdGlvbklkIFN0cmluZz8KfQoKbW9kZWwgcHJvZmlsZUNvbnRhY3QgewogIGlkICAgICAgICAgICAgU3RyaW5nICAgICAgIEBpZCBAZGVmYXVsdChjdWlkKCkpCiAgc3RhdHVzICAgICAgICBCb29sZWFuICAgICAgQGRlZmF1bHQodHJ1ZSkKICBjcmVhdGVkQXQgICAgIERhdGVUaW1lICAgICBAZGVmYXVsdChub3coKSkKICB1cGRhdGVkQXQgICAgIERhdGVUaW1lICAgICBAdXBkYXRlZEF0CiAgdGl0bGUgICAgICAgICBTdHJpbmc/IC8vIGNvbnRhY3QgcGVyc29uIGlzIG5vdCBtYW5kYXRvcnkuIENvbnRhY3QgVHlwZSBpcyBtb3JlIGltcG9ydGFudAogIHBob25lICAgICAgICAgU3RyaW5nPwogIGVtYWlsICAgICAgICAgU3RyaW5nPwogIHdlYnNpdGUgICAgICAgU3RyaW5nPwogIGNvbnRhY3RUeXBlICAgY29udGFjdFR5cGU/IEByZWxhdGlvbihmaWVsZHM6IFtjb250YWN0VHlwZUlkXSwgcmVmZXJlbmNlczogW2lkXSkKICBjb250YWN0VHlwZUlkIFN0cmluZz8KICBwcm9maWxlICAgICAgIHByb2ZpbGU/ICAgICBAcmVsYXRpb24oZmllbGRzOiBbcHJvZmlsZUlkXSwgcmVmZXJlbmNlczogW2lkXSkKICBwcm9maWxlSWQgICAgIFN0cmluZz8KfQoKbW9kZWwgcHJvZmlsZVN0YWZmIHsKICBpZCAgICAgICAgICAgICAgICAgICBTdHJpbmcgICAgICAgICAgICAgICAgQGlkIEBkZWZhdWx0KGN1aWQoKSkKICBzdGF0dXMgICAgICAgICAgICAgICBCb29sZWFuICAgICAgICAgICAgICAgQGRlZmF1bHQodHJ1ZSkKICBjcmVhdGVkQXQgICAgICAgICAgICBEYXRlVGltZSAgICAgICAgICAgICAgQGRlZmF1bHQobm93KCkpCiAgdXBkYXRlZEF0ICAgICAgICAgICAgRGF0ZVRpbWUgICAgICAgICAgICAgIEB1cGRhdGVkQXQKICBhdmF0YXIgICAgICAgICAgICAgICBTdHJpbmc/CiAgdGl0bGUgICAgICAgICAgICAgICAgU3RyaW5nIC8vIHN0YWZmIG5hbWUgaXMgbWFuZGF0b3J5CiAgZGVzaWduYXRpb24gICAgICAgICAgZGVzaWduYXRpb24/ICAgICAgICAgIEByZWxhdGlvbihmaWVsZHM6IFtkZXNpZ25hdGlvbklkXSwgcmVmZXJlbmNlczogW2lkXSkKICBkZXNpZ25hdGlvbklkICAgICAgICBTdHJpbmc/CiAgcHJvZmlsZSAgICAgICAgICAgICAgcHJvZmlsZT8gICAgICAgICAgICAgIEByZWxhdGlvbihmaWVsZHM6IFtwcm9maWxlSWRdLCByZWZlcmVuY2VzOiBbaWRdKQogIHByb2ZpbGVJZCAgICAgICAgICAgIFN0cmluZz8KICBwcm9maWxlU3RhZmZDb250YWN0cyBwcm9maWxlU3RhZmZDb250YWN0W10KfQoKbW9kZWwgcHJvZmlsZVN0YWZmQ29udGFjdCB7CiAgaWQgICAgICAgICAgICAgU3RyaW5nICAgICAgICBAaWQgQGRlZmF1bHQoY3VpZCgpKQogIHN0YXR1cyAgICAgICAgIEJvb2xlYW4gICAgICAgQGRlZmF1bHQodHJ1ZSkKICBjcmVhdGVkQXQgICAgICBEYXRlVGltZSAgICAgIEBkZWZhdWx0KG5vdygpKQogIHVwZGF0ZWRBdCAgICAgIERhdGVUaW1lICAgICAgQHVwZGF0ZWRBdAogIHRpdGxlICAgICAgICAgIFN0cmluZz8gLy8gY29udGFjdCBwZXJzb24gaXMgbm90IG1hbmRhdG9yeS4gQ29udGFjdCBUeXBlIGlzIG1vcmUgaW1wb3J0YW50CiAgcGhvbmUgICAgICAgICAgU3RyaW5nPwogIGVtYWlsICAgICAgICAgIFN0cmluZz8KICB3ZWJzaXRlICAgICAgICBTdHJpbmc/CiAgY29udGFjdFR5cGUgICAgY29udGFjdFR5cGU/ICBAcmVsYXRpb24oZmllbGRzOiBbY29udGFjdFR5cGVJZF0sIHJlZmVyZW5jZXM6IFtpZF0pCiAgY29udGFjdFR5cGVJZCAgU3RyaW5nPwogIHByb2ZpbGVTdGFmZiAgIHByb2ZpbGVTdGFmZj8gQHJlbGF0aW9uKGZpZWxkczogW3Byb2ZpbGVTdGFmZklkXSwgcmVmZXJlbmNlczogW2lkXSkKICBwcm9maWxlU3RhZmZJZCBTdHJpbmc/Cn0KCm1vZGVsIHByb2ZpbGVQcm9ncmFtbWUgewogIGlkICAgICAgICAgICAgICAgICAgIFN0cmluZyAgICAgICAgICAgICAgICBAaWQgQGRlZmF1bHQoY3VpZCgpKQogIHN0YXR1cyAgICAgICAgICAgICAgIEJvb2xlYW4gICAgICAgICAgICAgICBAZGVmYXVsdCh0cnVlKQogIGNyZWF0ZWRBdCAgICAgICAgICAgIERhdGVUaW1lICAgICAgICAgICAgICBAZGVmYXVsdChub3coKSkKICB1cGRhdGVkQXQgICAgICAgICAgICBEYXRlVGltZSAgICAgICAgICAgICAgQHVwZGF0ZWRBdAogIGF2YXRhciAgICAgICAgICAgICAgIFN0cmluZz8KICB0aHVtYm5haWwgICAgICAgICAgICBTdHJpbmc/CiAgY291cnNlICAgICAgICAgICAgICAgY291cnNlPyAgICAgICAgICAgICAgIEByZWxhdGlvbihmaWVsZHM6IFtjb3Vyc2VJZF0sIHJlZmVyZW5jZXM6IFtpZF0pIC8vIGV4YW1wbGU6IEIuVGVjaAogIGNvdXJzZUlkICAgICAgICAgICAgIFN0cmluZz8KICBzcGVjaWFsaXphdGlvbiAgICAgICBzcGVjaWFsaXphdGlvbj8gICAgICAgQHJlbGF0aW9uKGZpZWxkczogW3NwZWNpYWxpemF0aW9uSWRdLCByZWZlcmVuY2VzOiBbaWRdKSAvLyBleGFtcGxlOiBDb21wdXRlciBTY2llbmNlIGFuZCBFbmdpbmVlcmluZwogIHNwZWNpYWxpemF0aW9uSWQgICAgIFN0cmluZz8KICBwcm9maWxlICAgICAgICAgICAgICBwcm9maWxlPyAgICAgICAgICAgICAgQHJlbGF0aW9uKGZpZWxkczogW3Byb2ZpbGVJZF0sIHJlZmVyZW5jZXM6IFtpZF0pCiAgcHJvZmlsZUlkICAgICAgICAgICAgU3RyaW5nPwogIGludGFrZSAgICAgICAgICAgICAgIGludGFrZT8gICAgICAgICAgICAgICBAcmVsYXRpb24oZmllbGRzOiBbaW50YWtlSWRdLCByZWZlcmVuY2VzOiBbaWRdKSAvLyBFZzogTWFyY2gKICBpbnRha2VJZCAgICAgICAgICAgICBTdHJpbmc/CiAgY2FwYWNpdHkgICAgICAgICAgICAgSW50PyAvLyBudW1iZXIgb2Ygc2VhdHMKICBsZXZlbCAgICAgICAgICAgICAgICBsZXZlbD8gICAgICAgICAgICAgICAgQHJlbGF0aW9uKGZpZWxkczogW2xldmVsSWRdLCByZWZlcmVuY2VzOiBbaWRdKSAvLyBFeGFtcGxlOiBVbmRlciBHcmFkdWF0aW9uCiAgbGV2ZWxJZCAgICAgICAgICAgICAgU3RyaW5nPwogIGR1cmF0aW9uICAgICAgICAgICAgIEludD8gLy8gRXhhbXBsZTogNAogIGR1cmF0aW9uVHlwZSAgICAgICAgIGR1cmF0aW9uVHlwZT8gICAgICAgICBAcmVsYXRpb24oZmllbGRzOiBbZHVyYXRpb25UeXBlSWRdLCByZWZlcmVuY2VzOiBbaWRdKSAvLyBFeGFtcGxlOiBZZWFycwogIGR1cmF0aW9uVHlwZUlkICAgICAgIFN0cmluZz8KICBwcm9maWxlUHJvZ3JhbW1lRmVlcyBwcm9maWxlUHJvZ3JhbW1lRmVlW10KfQoKbW9kZWwgcHJvZmlsZVByb2dyYW1tZUZlZSB7CiAgaWQgICAgICAgICAgICAgICAgIFN0cmluZyAgICAgICAgICAgIEBpZCBAZGVmYXVsdChjdWlkKCkpCiAgc3RhdHVzICAgICAgICAgICAgIEJvb2xlYW4gICAgICAgICAgIEBkZWZhdWx0KHRydWUpCiAgY3JlYXRlZEF0ICAgICAgICAgIERhdGVUaW1lICAgICAgICAgIEBkZWZhdWx0KG5vdygpKQogIHVwZGF0ZWRBdCAgICAgICAgICBEYXRlVGltZSAgICAgICAgICBAdXBkYXRlZEF0CiAgdGl0bGUgICAgICAgICAgICAgIFN0cmluZz8gLy8gZXhhbXBsZSBjYXV0aW9uIGRlcG9zaXQsIHR1dGlvbiBmZWUsIHNwZWNpYWwgZmVlIGV0YwogIGFtb3VudCAgICAgICAgICAgICBGbG9hdD8gLy8gRXhhbXBsZTogNjAsMDAwCiAgY3VycmVuY3kgICAgICAgICAgIGN1cnJlbmN5PyAgICAgICAgIEByZWxhdGlvbihmaWVsZHM6IFtjdXJyZW5jeUlkXSwgcmVmZXJlbmNlczogW2lkXSkgLy8gRXhhbXBsZTogSW5kaWFuIFJ1cGVlcwogIGN1cnJlbmN5SWQgICAgICAgICBTdHJpbmc/CiAgZnJlcXVlbmN5ICAgICAgICAgIGZyZXF1ZW5jeT8gICAgICAgIEByZWxhdGlvbihmaWVsZHM6IFtmcmVxdWVuY3lJZF0sIHJlZmVyZW5jZXM6IFtpZF0pIC8vIEV4YW1wbGU6IEFubnVhbGx5IAogIGZyZXF1ZW5jeUlkICAgICAgICBTdHJpbmc/CiAgcHJvZmlsZVByb2dyYW1tZSAgIHByb2ZpbGVQcm9ncmFtbWU/IEByZWxhdGlvbihmaWVsZHM6IFtwcm9maWxlUHJvZ3JhbW1lSWRdLCByZWZlcmVuY2VzOiBbaWRdKQogIHByb2ZpbGVQcm9ncmFtbWVJZCBTdHJpbmc/Cn0KCi8vIEFsbCBleHRlcm5hbCBsaW5rcyBvdGhlciB0aGFuIHNvY2lhbCBtZWRpYSBsaW5rcwovLyBNZWRpYSBUeXBlIHdpbGwgYmUgdGhlIHRpdGxlCi8vIEV4YW1wbGUgb2ZmaWNpYWwgd2Vic2l0ZSwgZSBicm9jaHVyZSwgY29ycG9yYXRlIHZpZGVvLCB2aXJ0dWFsIHRvdXIsIHByb3NwZWN0dXMsIG1lZGlhIGtpdAptb2RlbCBwcm9maWxlTWVkaWEgewogIGlkICAgICAgICBTdHJpbmcgICBAaWQgQGRlZmF1bHQoY3VpZCgpKQogIHN0YXR1cyAgICBCb29sZWFuICBAZGVmYXVsdCh0cnVlKQogIGNyZWF0ZWRBdCBEYXRlVGltZSBAZGVmYXVsdChub3coKSkKICB1cGRhdGVkQXQgRGF0ZVRpbWUgQHVwZGF0ZWRBdAogIGxpbmsgICAgICBTdHJpbmc/CiAgcHJvZmlsZSAgIHByb2ZpbGU/IEByZWxhdGlvbihmaWVsZHM6IFtwcm9maWxlSWRdLCByZWZlcmVuY2VzOiBbaWRdKQogIHByb2ZpbGVJZCBTdHJpbmc/CiAgbWVkaWEgICAgIG1lZGlhPyAgIEByZWxhdGlvbihmaWVsZHM6IFttZWRpYUlkXSwgcmVmZXJlbmNlczogW2lkXSkKICBtZWRpYUlkICAgU3RyaW5nPwp9CgovLyBzb2NpYWwgbWVkaWEgbGlua3MKLy8gU29jaWFsIFR5cGUgd2lsbCBiZSB0aGUgdGl0bGUKbW9kZWwgcHJvZmlsZVNvY2lhbCB7CiAgaWQgICAgICAgIFN0cmluZyAgIEBpZCBAZGVmYXVsdChjdWlkKCkpCiAgc3RhdHVzICAgIEJvb2xlYW4gIEBkZWZhdWx0KHRydWUpCiAgY3JlYXRlZEF0IERhdGVUaW1lIEBkZWZhdWx0KG5vdygpKQogIHVwZGF0ZWRBdCBEYXRlVGltZSBAdXBkYXRlZEF0CiAgbGluayAgICAgIFN0cmluZz8KICBwcm9maWxlICAgcHJvZmlsZT8gQHJlbGF0aW9uKGZpZWxkczogW3Byb2ZpbGVJZF0sIHJlZmVyZW5jZXM6IFtpZF0pCiAgcHJvZmlsZUlkIFN0cmluZz8KICBzb2NpYWwgICAgc29jaWFsPyAgQHJlbGF0aW9uKGZpZWxkczogW3NvY2lhbElkXSwgcmVmZXJlbmNlczogW2lkXSkKICBzb2NpYWxJZCAgU3RyaW5nPwp9Cgptb2RlbCBwcm9maWxlRmFjaWxpdHkgewogIGlkICAgICAgICAgU3RyaW5nICAgIEBpZCBAZGVmYXVsdChjdWlkKCkpCiAgc3RhdHVzICAgICBCb29sZWFuICAgQGRlZmF1bHQodHJ1ZSkKICBjcmVhdGVkQXQgIERhdGVUaW1lICBAZGVmYXVsdChub3coKSkKICB1cGRhdGVkQXQgIERhdGVUaW1lICBAdXBkYXRlZEF0CiAgcHJvZmlsZSAgICBwcm9maWxlPyAgQHJlbGF0aW9uKGZpZWxkczogW3Byb2ZpbGVJZF0sIHJlZmVyZW5jZXM6IFtpZF0pCiAgcHJvZmlsZUlkICBTdHJpbmc/CiAgZmFjaWxpdHkgICBmYWNpbGl0eT8gQHJlbGF0aW9uKGZpZWxkczogW2ZhY2lsaXR5SWRdLCByZWZlcmVuY2VzOiBbaWRdKQogIGZhY2lsaXR5SWQgU3RyaW5nPwp9Cgptb2RlbCBwcm9maWxlUmVwb3J0IHsKICBpZCAgICAgICAgICBTdHJpbmcgICBAaWQgQGRlZmF1bHQoY3VpZCgpKQogIHN0YXR1cyAgICAgIEJvb2xlYW4gIEBkZWZhdWx0KHRydWUpCiAgY3JlYXRlZEF0ICAgRGF0ZVRpbWUgQGRlZmF1bHQobm93KCkpCiAgdXBkYXRlZEF0ICAgRGF0ZVRpbWUgQHVwZGF0ZWRBdAogIHRpdGxlICAgICAgIFN0cmluZyAvLyBzdWJqZWN0IG9yIHR5cGUgb2YgcmVwb3J0CiAgZGVzY3JpcHRpb24gU3RyaW5nIC8vIGRlc2NyaXB0aW9uIGFib3V0IHRoZSByZXBvcnQKICBuYW1lICAgICAgICBTdHJpbmc/ICBAZGVmYXVsdCgiQW5vbnltb3VzIikgLy8gcGVyc29uIHdobyBpcyByZXBvcnRpbmcuIENhbiBiZSBhbm9ueW1vdXMKICBwaG9uZSAgICAgICBTdHJpbmc/CiAgZW1haWwgICAgICAgU3RyaW5nPwogIGxvY2F0aW9uICAgIFN0cmluZz8KICBwcm9maWxlICAgICBwcm9maWxlPyBAcmVsYXRpb24oZmllbGRzOiBbcHJvZmlsZUlkXSwgcmVmZXJlbmNlczogW2lkXSkKICBwcm9maWxlSWQgICBTdHJpbmc/Cn0KCm1vZGVsIHByb2ZpbGVSZXF1ZXN0IHsKICBpZCAgICAgICAgICBTdHJpbmcgICBAaWQgQGRlZmF1bHQoY3VpZCgpKQogIHN0YXR1cyAgICAgIEJvb2xlYW4gIEBkZWZhdWx0KHRydWUpCiAgY3JlYXRlZEF0ICAgRGF0ZVRpbWUgQGRlZmF1bHQobm93KCkpCiAgdXBkYXRlZEF0ICAgRGF0ZVRpbWUgQHVwZGF0ZWRBdAogIHRpdGxlICAgICAgIFN0cmluZz8gLy8gU3ViamVjdCBvciB0eXBlIG9mIHJlcXVlc3QKICBkZXNjcmlwdGlvbiBTdHJpbmc/IC8vIGRlc2NyaXB0aW9uIGFib3V0IHRoZSByZXF1ZXN0CiAgbmFtZSAgICAgICAgU3RyaW5nPwogIHBob25lICAgICAgIFN0cmluZz8KICBlbWFpbCAgICAgICBTdHJpbmcgLy8gZW1haWwgYWRkcmVzcyBpcyBtYW5kYXRvcnkKICBsb2NhdGlvbiAgICBTdHJpbmc/CiAgcHJvZmlsZSAgICAgcHJvZmlsZT8gQHJlbGF0aW9uKGZpZWxkczogW3Byb2ZpbGVJZF0sIHJlZmVyZW5jZXM6IFtpZF0pCiAgcHJvZmlsZUlkICAgU3RyaW5nPwp9Cgptb2RlbCBwcm9maWxlUmVsYXRpb24gewogIGlkICAgICAgICAgIFN0cmluZyAgIEBpZCBAZGVmYXVsdChjdWlkKCkpCiAgc3RhdHVzICAgICAgQm9vbGVhbiAgQGRlZmF1bHQodHJ1ZSkKICBjcmVhdGVkQXQgICBEYXRlVGltZSBAZGVmYXVsdChub3coKSkKICB1cGRhdGVkQXQgICBEYXRlVGltZSBAdXBkYXRlZEF0CiAgZGVzY3JpcHRpb24gU3RyaW5nIC8vIHNob3J0IG5vdGUgaXMgbWFuZGF0b3J5CiAgbmFtZSAgICAgICAgU3RyaW5nPyAvLyBjb250YWN0IHBlcnNvbgogIHBob25lICAgICAgIFN0cmluZz8KICBlbWFpbCAgICAgICBTdHJpbmc/CiAgbG9jYXRpb24gICAgU3RyaW5nPwogIHJhdGluZyAgICAgIEludCAgICAgIEBkZWZhdWx0KDApIC8vIG1hZGF0b3J5LiBvdXQgb2YgNQogIHByb2ZpbGUgICAgIHByb2ZpbGU/IEByZWxhdGlvbihmaWVsZHM6IFtwcm9maWxlSWRdLCByZWZlcmVuY2VzOiBbaWRdKQogIHByb2ZpbGVJZCAgIFN0cmluZz8KfQoKbW9kZWwgcHJvZmlsZVJldmlldyB7CiAgaWQgICAgICAgICAgU3RyaW5nICAgQGlkIEBkZWZhdWx0KGN1aWQoKSkKICBzdGF0dXMgICAgICBCb29sZWFuICBAZGVmYXVsdCh0cnVlKQogIGNyZWF0ZWRBdCAgIERhdGVUaW1lIEBkZWZhdWx0KG5vdygpKQogIHVwZGF0ZWRBdCAgIERhdGVUaW1lIEB1cGRhdGVkQXQKICB0aXRsZSAgICAgICBTdHJpbmc/IC8vIHN1YmplY3Qgb3IgcmV2aWV3IGNvbnRleHQKICBkZXNjcmlwdGlvbiBTdHJpbmc/IC8vIHNob3J0IG5vZGUgCiAgcmF0aW5nICAgICAgSW50ICAgICAgQGRlZmF1bHQoMCkgLy8gbWFkYXRvcnkKICBuYW1lICAgICAgICBTdHJpbmc/CiAgcGhvbmUgICAgICAgU3RyaW5nPwogIGVtYWlsICAgI