diff --git a/src/abi-metadata.ts b/src/abi-metadata.ts index 9e97a2e..f31554f 100644 --- a/src/abi-metadata.ts +++ b/src/abi-metadata.ts @@ -103,7 +103,7 @@ const getArc4TypeName = (t: TypeInfo): string => { AssetTransferTxn: 'axfer', AssetFreezeTxn: 'afrz', ApplicationTxn: 'appl', - 'Tuple<.*>': (t) => + 'Tuple(<.*>)?': (t) => `(${Object.values(t.genericArgs as Record) .map(getArc4TypeName) .join(',')})`, diff --git a/src/impl/emit.ts b/src/impl/emit.ts new file mode 100644 index 0000000..d5974ed --- /dev/null +++ b/src/impl/emit.ts @@ -0,0 +1,28 @@ +import { internal } from '@algorandfoundation/algorand-typescript' +import { lazyContext } from '../context-helpers/internal-context' +import { DeliberateAny } from '../typescript-helpers' +import { sha512_256 } from './crypto' +import { getArc4Encoded, getArc4TypeName } from './encoded-types' + +export function emitImpl(typeInfoString: string, event: T | string, ...eventProps: unknown[]) { + let eventData + let eventName + if (typeof event === 'string') { + eventData = getArc4Encoded(eventProps) + eventName = event + const argTypes = getArc4TypeName((eventData as DeliberateAny).typeInfo)! + if (eventName.indexOf('(') === -1) { + eventName += argTypes + } else if (event.indexOf(argTypes) === -1) { + throw internal.errors.codeError(`Event signature ${event} does not match arg types ${argTypes}`) + } + } else { + eventData = getArc4Encoded(event) + const typeInfo = JSON.parse(typeInfoString) + const argTypes = getArc4TypeName((eventData as DeliberateAny).typeInfo)! + eventName = typeInfo.name.replace(/.*.*/, '') + argTypes + } + + const eventHash = sha512_256(eventName) + lazyContext.value.log(eventHash.slice(0, 4).concat(eventData.bytes)) +} diff --git a/src/impl/encoded-types.ts b/src/impl/encoded-types.ts index 9ff4bfa..162c5fb 100644 --- a/src/impl/encoded-types.ts +++ b/src/impl/encoded-types.ts @@ -167,13 +167,12 @@ export class UFixedNxMImpl extends UFixedNx } export class ByteImpl extends Byte { + typeInfo: TypeInfo private value: UintNImpl<8> - constructor( - public typeInfo: TypeInfo | string, - v?: CompatForArc4Int<8>, - ) { + constructor(typeInfo: TypeInfo | string, v?: CompatForArc4Int<8>) { super(v) + this.typeInfo = typeof typeInfo === 'string' ? JSON.parse(typeInfo) : typeInfo this.value = new UintNImpl<8>(typeInfo, v) } @@ -209,15 +208,14 @@ export class ByteImpl extends Byte { } export class StrImpl extends Str { + typeInfo: TypeInfo private value: Uint8Array - constructor( - public typeInfo: TypeInfo | string, - s?: StringCompat, - ) { + constructor(typeInfo: TypeInfo | string, s?: StringCompat) { super() const bytesValue = asBytesCls(s ?? '') const bytesLength = encodeLength(bytesValue.length.asNumber()) + this.typeInfo = typeof typeInfo === 'string' ? JSON.parse(typeInfo) : typeInfo this.value = asUint8Array(bytesLength.concat(bytesValue)) } get native(): string { @@ -255,12 +253,11 @@ const TRUE_BIGINT_VALUE = 128n const FALSE_BIGINT_VALUE = 0n export class BoolImpl extends Bool { private value: Uint8Array + typeInfo: TypeInfo - constructor( - public typeInfo: TypeInfo | string, - v?: boolean, - ) { + constructor(typeInfo: TypeInfo | string, v?: boolean) { super(v) + this.typeInfo = typeof typeInfo === 'string' ? JSON.parse(typeInfo) : typeInfo this.value = encodingUtil.bigIntToUint8Array(v ? TRUE_BIGINT_VALUE : FALSE_BIGINT_VALUE, 1) } @@ -1154,8 +1151,8 @@ export const arc4Encoders: Record> = { 'UFixedNxM<.*>': UFixedNxMImpl.fromBytesImpl, 'StaticArray<.*>': StaticArrayImpl.fromBytesImpl, 'DynamicArray<.*>': DynamicArrayImpl.fromBytesImpl, - Tuple: TupleImpl.fromBytesImpl, - Struct: StructImpl.fromBytesImpl, + 'Tuple(<.*>)?': TupleImpl.fromBytesImpl, + 'Struct(<.*>)?': StructImpl.fromBytesImpl, DynamicBytes: DynamicBytesImpl.fromBytesImpl, 'StaticBytes<.*>': StaticBytesImpl.fromBytesImpl, } @@ -1177,8 +1174,8 @@ export const getArc4TypeName = (typeInfo: TypeInfo): string | undefined => { 'UFixedNxM<.*>': UFixedNxMImpl.getArc4TypeName, 'StaticArray<.*>': StaticArrayImpl.getArc4TypeName, 'DynamicArray<.*>': DynamicArrayImpl.getArc4TypeName, - Tuple: TupleImpl.getArc4TypeName, - Struct: StructImpl.getArc4TypeName, + 'Tuple(<.*>)?': TupleImpl.getArc4TypeName, + 'Struct(<.*>)?': StructImpl.getArc4TypeName, DynamicBytes: DynamicBytesImpl.getArc4TypeName, 'StaticBytes<.*>': StaticBytesImpl.getArc4TypeName, } @@ -1213,7 +1210,7 @@ const getNativeValue = (value: DeliberateAny): DeliberateAny => { return native } -const getArc4Encoded = (value: DeliberateAny): ARC4Encoded => { +export const getArc4Encoded = (value: DeliberateAny): ARC4Encoded => { if (value instanceof ARC4Encoded) { return value } @@ -1263,7 +1260,10 @@ const getArc4Encoded = (value: DeliberateAny): ARC4Encoded => { return acc.concat(getArc4Encoded(cur)) }, []) const genericArgs: TypeInfo[] = result.map((x) => (x as DeliberateAny).typeInfo) - const typeInfo = { name: 'Struct', genericArgs: Object.fromEntries(Object.keys(value).map((x, i) => [x, genericArgs[i]])) } + const typeInfo = { + name: `Struct<${value.constructor.name}>`, + genericArgs: Object.fromEntries(Object.keys(value).map((x, i) => [x, genericArgs[i]])), + } return new StructImpl(typeInfo, Object.fromEntries(Object.keys(value).map((x, i) => [x, result[i]]))) } diff --git a/src/runtime-helpers.ts b/src/runtime-helpers.ts index 82aab27..a620884 100644 --- a/src/runtime-helpers.ts +++ b/src/runtime-helpers.ts @@ -7,6 +7,7 @@ import { DeliberateAny } from './typescript-helpers' import { nameOfType } from './util' export { attachAbiMetadata } from './abi-metadata' +export { emitImpl } from './impl/emit' export * from './impl/encoded-types' export { decodeArc4Impl, encodeArc4Impl } from './impl/encoded-types' export { ensureBudgetImpl } from './impl/ensure-budget' diff --git a/src/test-transformer/visitors.ts b/src/test-transformer/visitors.ts index d621436..fd686ae 100644 --- a/src/test-transformer/visitors.ts +++ b/src/test-transformer/visitors.ts @@ -21,6 +21,7 @@ const algotsModulePaths = [ type VisitorHelper = { additionalStatements: ts.Statement[] resolveType(node: ts.Node): ptypes.PType + resolveTypeParameters(node: ts.CallExpression): ptypes.PType[] sourceLocation(node: ts.Node): SourceLocation tryGetSymbol(node: ts.Node): ts.Symbol | undefined } @@ -44,6 +45,9 @@ export class SourceFileVisitor { return ptypes.anyPType } }, + resolveTypeParameters(node: ts.CallExpression) { + return typeResolver.resolveTypeParameters(node, this.sourceLocation(node)) + }, tryGetSymbol(node: ts.Node): ts.Symbol | undefined { const s = typeChecker.getSymbolAtLocation(node) return s && s.flags & ts.SymbolFlags.Alias ? typeChecker.getAliasedSymbol(s) : s @@ -112,6 +116,9 @@ class ExpressionVisitor { if (ts.isCallExpression(updatedNode)) { const stubbedFunctionName = tryGetStubbedFunctionName(updatedNode, this.helper) const infos = [info] + if (isCallingEmit(stubbedFunctionName)) { + infos[0] = this.helper.resolveTypeParameters(updatedNode).map(getGenericTypeInfo)[0] + } if (isCallingDecodeArc4(stubbedFunctionName)) { const targetType = ptypes.ptypeToArc4EncodedType(type, this.helper.sourceLocation(node)) const targetTypeInfo = getGenericTypeInfo(targetType) @@ -332,7 +339,7 @@ const getGenericTypeInfo = (type: ptypes.PType): TypeInfo => { } else if (type instanceof ptypes.UintNType) { genericArgs.push({ name: type.n.toString() }) } else if (type instanceof ptypes.ARC4StructType) { - typeName = 'Struct' + typeName = `Struct<${type.name}>` genericArgs = Object.fromEntries( Object.entries(type.fields) .map(([key, value]) => [key, getGenericTypeInfo(value)]) @@ -360,8 +367,9 @@ const tryGetStubbedFunctionName = (node: ts.CallExpression, helper: VisitorHelpe if (sourceFileName && !algotsModulePaths.some((s) => sourceFileName.includes(s))) return undefined } const functionName = functionSymbol?.getName() ?? identityExpression.text - const stubbedFunctionNames = ['interpretAsArc4', 'decodeArc4', 'encodeArc4', 'TemplateVar', 'ensureBudget'] + const stubbedFunctionNames = ['interpretAsArc4', 'decodeArc4', 'encodeArc4', 'TemplateVar', 'ensureBudget', 'emit'] return stubbedFunctionNames.includes(functionName) ? functionName : undefined } const isCallingDecodeArc4 = (functionName: string | undefined): boolean => ['decodeArc4', 'encodeArc4'].includes(functionName ?? '') +const isCallingEmit = (functionName: string | undefined): boolean => 'emit' === (functionName ?? '') diff --git a/tests/arc4/emit.spec.ts b/tests/arc4/emit.spec.ts new file mode 100644 index 0000000..be5af0b --- /dev/null +++ b/tests/arc4/emit.spec.ts @@ -0,0 +1,138 @@ +import { AppSpec } from '@algorandfoundation/algokit-utils/types/app-spec' +import { arc4, BigUint, biguint, Bytes, bytes, emit, Uint64, uint64 } from '@algorandfoundation/algorand-typescript' +import { TestExecutionContext } from '@algorandfoundation/algorand-typescript-testing' +import { afterEach, describe, expect, it } from 'vitest' +import { MAX_UINT512, MAX_UINT64 } from '../../src/constants' +import appSpecJson from '../artifacts/arc4-primitive-ops/data/Arc4PrimitiveOpsContract.arc32.json' +import { getAlgorandAppClient, getAvmResultLog } from '../avm-invoker' + +import { asBigUintCls, asNumber, asUint8Array } from '../../src/util' + +class Swapped { + a: string + b: biguint + c: uint64 + d: bytes + e: uint64 + f: boolean + g: bytes + h: string + + constructor(a: string, b: biguint, c: uint64, d: bytes, e: uint64, f: boolean, g: bytes, h: string) { + this.a = a + this.b = b + this.c = c + this.d = d + this.e = e + this.f = f + this.g = g + this.h = h + } +} +class SwappedArc4 extends arc4.Struct<{ + m: arc4.UintN<64> + n: arc4.UintN<256> + o: arc4.UFixedNxM<32, 8> + p: arc4.UFixedNxM<256, 16> + q: arc4.Bool + r: arc4.StaticArray + s: arc4.DynamicArray + t: arc4.Tuple<[arc4.UintN32, arc4.UintN64, arc4.Str]> +}> {} + +describe('arc4.emit', async () => { + const appClient = await getAlgorandAppClient(appSpecJson as AppSpec) + const ctx = new TestExecutionContext() + + afterEach(async () => { + ctx.reset() + }) + + it('should emit the correct values', async () => { + const test_data = new Swapped('hello', BigUint(MAX_UINT512), Uint64(MAX_UINT64), Bytes('world'), 16, false, Bytes('test'), 'greetings') + + const test_data_arc4 = new SwappedArc4({ + m: new arc4.UintN64(42), + n: new arc4.UintN256(512), + o: new arc4.UFixedNxM<32, 8>('42.94967295'), + p: new arc4.UFixedNxM<256, 16>('25.5'), + q: new arc4.Bool(true), + r: new arc4.StaticArray(new arc4.UintN8(1), new arc4.UintN8(2), new arc4.UintN8(3)), + s: new arc4.DynamicArray(new arc4.UintN16(1), new arc4.UintN16(2), new arc4.UintN16(3)), + t: new arc4.Tuple(new arc4.UintN32(1), new arc4.UintN64(2), new arc4.Str('hello')), + }) + const avm_result = await getAvmResultLog( + { appClient }, + 'verify_emit', + test_data.a, + test_data.b.valueOf(), + test_data.c.valueOf(), + asUint8Array(test_data.d), + test_data.e, + test_data.f, + asUint8Array(test_data.g), + test_data.h, + test_data_arc4.m.native.valueOf(), + test_data_arc4.n.native.valueOf(), + asBigUintCls(test_data_arc4.o.bytes).asBigInt(), + asBigUintCls(test_data_arc4.p.bytes).asBigInt(), + test_data_arc4.q.native, + asUint8Array(test_data_arc4.r.bytes), + asUint8Array(test_data_arc4.s.bytes), + asUint8Array(test_data_arc4.t.bytes), + ) + + expect(avm_result).toBeInstanceOf(Array) + const avmLogs = avm_result?.map(Bytes) + + const dummy_app = ctx.any.application() + const app_txn = ctx.any.txn.applicationCall({ appId: dummy_app }) + ctx.txn.createScope([app_txn]).execute(() => { + emit(test_data_arc4) + emit( + 'Swapped', + test_data.a, + test_data.b, + test_data.c, + test_data.d, + test_data.e, + test_data.f, + test_data.g, + test_data.h, + test_data_arc4.m, + test_data_arc4.n, + test_data_arc4.o, + test_data_arc4.p, + test_data_arc4.q, + test_data_arc4.r, + test_data_arc4.s, + test_data_arc4.t, + ) + emit( + 'Swapped(string,uint512,uint64,byte[],uint64,bool,byte[],string,uint64,uint256,ufixed32x8,ufixed256x16,bool,uint8[3],uint16[],(uint32,uint64,string))', + test_data.a, + test_data.b, + test_data.c, + test_data.d, + test_data.e, + test_data.f, + test_data.g, + test_data.h, + test_data_arc4.m, + test_data_arc4.n, + test_data_arc4.o, + test_data_arc4.p, + test_data_arc4.q, + test_data_arc4.r, + test_data_arc4.s, + test_data_arc4.t, + ) + const arc4_result = [...Array(asNumber(app_txn.numLogs)).keys()].fill(0).map((_, i) => app_txn.logs(i)) + + expect(arc4_result[0]).toEqual(avmLogs![0]) + expect(arc4_result[1]).toEqual(avmLogs![1]) + expect(arc4_result[1]).toEqual(arc4_result[2]) + expect(arc4_result[2]).toEqual(avmLogs![2]) + }) + }) +}) diff --git a/tests/artifacts/arc4-primitive-ops/contract.algo.ts b/tests/artifacts/arc4-primitive-ops/contract.algo.ts index 345a365..7e49aec 100644 --- a/tests/artifacts/arc4-primitive-ops/contract.algo.ts +++ b/tests/artifacts/arc4-primitive-ops/contract.algo.ts @@ -1,4 +1,4 @@ -import { arc4, BigUint, bytes } from '@algorandfoundation/algorand-typescript' +import { arc4, BigUint, bytes, emit } from '@algorandfoundation/algorand-typescript' import { Bool, Byte, Contract, interpretAsArc4, Str, UFixedNxM, UintN } from '@algorandfoundation/algorand-typescript/arc4' export class Arc4PrimitiveOpsContract extends Contract { @@ -344,4 +344,62 @@ export class Arc4PrimitiveOpsContract extends Contract { public verify_bool_from_log(a: bytes): Bool { return interpretAsArc4(a, 'log') } + + // TODO: recompile when puya-ts is updated + @arc4.abimethod() + public verify_emit( + a: arc4.Str, + b: arc4.UintN<512>, + c: arc4.UintN64, + d: arc4.DynamicBytes, + e: arc4.UintN64, + f: arc4.Bool, + g: arc4.DynamicBytes, + h: arc4.Str, + m: arc4.UintN<64>, + n: arc4.UintN<256>, + o: arc4.UFixedNxM<32, 8>, + p: arc4.UFixedNxM<256, 16>, + q: arc4.Bool, + r: bytes, + s: bytes, + t: bytes, + ): void { + const arc4_r = interpretAsArc4>(r) + const arc4_s = interpretAsArc4>(s) + const arc4_t = interpretAsArc4>(t) + + emit(new SwappedArc4({ m, n, o, p, q, r: arc4_r, s: arc4_s, t: arc4_t })) + emit('Swapped', a, b, c, d, e, f, g, h, m, n, o, p, q, arc4_r.copy(), arc4_s.copy(), arc4_t) + emit( + 'Swapped(string,uint512,uint64,byte[],uint64,bool,byte[],string,uint64,uint256,ufixed32x8,ufixed256x16,bool,uint8[3],uint16[],(uint32,uint64,string))', + a, + b, + c, + d, + e, + f, + g, + h, + m, + n, + o, + p, + q, + arc4_r.copy(), + arc4_s.copy(), + arc4_t, + ) + } } + +class SwappedArc4 extends arc4.Struct<{ + m: arc4.UintN<64> + n: arc4.UintN<256> + o: arc4.UFixedNxM<32, 8> + p: arc4.UFixedNxM<256, 16> + q: arc4.Bool + r: arc4.StaticArray + s: arc4.DynamicArray + t: arc4.Tuple<[arc4.UintN32, arc4.UintN64, arc4.Str]> +}> {} diff --git a/tests/artifacts/arc4-primitive-ops/data/Arc4PrimitiveOpsContract.approval.teal b/tests/artifacts/arc4-primitive-ops/data/Arc4PrimitiveOpsContract.approval.teal index b4b93f4..7711262 100644 --- a/tests/artifacts/arc4-primitive-ops/data/Arc4PrimitiveOpsContract.approval.teal +++ b/tests/artifacts/arc4-primitive-ops/data/Arc4PrimitiveOpsContract.approval.teal @@ -1,27 +1,26 @@ #pragma version 10 +#pragma typetrack false -tests/artifacts/arc4-primitive-ops/contract.algo.ts::Arc4PrimitiveOpsContract.approvalProgram: +// @algorandfoundation/algorand-typescript/arc4/index.d.ts::Contract.approvalProgram() -> uint64: +main: intcblock 1 8 64 0 bytecblock 0x151f7c75 0x00 - callsub __puya_arc4_router__ - return - - -// tests/artifacts/arc4-primitive-ops/contract.algo.ts::Arc4PrimitiveOpsContract.__puya_arc4_router__() -> uint64: -__puya_arc4_router__: // tests/artifacts/arc4-primitive-ops/contract.algo.ts:4 // export class Arc4PrimitiveOpsContract extends Contract { - proto 0 1 txn NumAppArgs - bz __puya_arc4_router___bare_routing@58 - pushbytess 0x96f14116 0xed666096 0x2ca0352b 0x85907d40 0x4eb2af4a 0x2cbec45b 0x07666fd9 0x370babd3 0x2b6b3ef0 0x27e21a98 0x339da97c 0x7898ed97 0x1f130cec 0xc748664e 0xa2bac14b 0x7a460cb1 0xdcab1f01 0x97d9064d 0xce06c2a0 0x7c11e375 0xdcdbcee0 0x77a4b68d 0x4f540626 0x095aed41 0xdf78cdc6 0xe3b7e918 0x55337008 0x9bb1cd66 0x81484d9d 0x79e9cb03 0x9a03df10 0xd3f0e44b 0x673db2bd 0x982db233 0xaffbdf0e 0x8e4a30f7 0x288af76e 0x8bd84a04 0xfcd55e1f 0x0f1574fe 0xb2cb13be 0xd059eea7 0x4cc4c157 0x3d17ac6e 0xf7f3d5fc 0xf8c8f8d5 0x43f7162a 0x42e09075 0xd956f575 0x6c0160df 0xa890150b 0x0b2f4c3f 0x9db9d327 0xe4d950a1 // method "verify_uintn_uintn_eq(byte[],byte[])bool", method "verify_biguintn_uintn_eq(byte[],byte[])bool", method "verify_uintn_biguintn_eq(byte[],byte[])bool", method "verify_biguintn_biguintn_eq(byte[],byte[])bool", method "verify_byte_byte_eq(byte[],byte[])bool", method "verify_uintn_uintn_ne(byte[],byte[])bool", method "verify_biguintn_uintn_ne(byte[],byte[])bool", method "verify_uintn_biguintn_ne(byte[],byte[])bool", method "verify_biguintn_biguintn_ne(byte[],byte[])bool", method "verify_byte_byte_ne(byte[],byte[])bool", method "verify_uintn_uintn_lt(byte[],byte[])bool", method "verify_biguintn_uintn_lt(byte[],byte[])bool", method "verify_uintn_biguintn_lt(byte[],byte[])bool", method "verify_biguintn_biguintn_lt(byte[],byte[])bool", method "verify_byte_byte_lt(byte[],byte[])bool", method "verify_uintn_uintn_le(byte[],byte[])bool", method "verify_biguintn_uintn_le(byte[],byte[])bool", method "verify_uintn_biguintn_le(byte[],byte[])bool", method "verify_biguintn_biguintn_le(byte[],byte[])bool", method "verify_byte_byte_le(byte[],byte[])bool", method "verify_uintn_uintn_gt(byte[],byte[])bool", method "verify_biguintn_uintn_gt(byte[],byte[])bool", method "verify_uintn_biguintn_gt(byte[],byte[])bool", method "verify_biguintn_biguintn_gt(byte[],byte[])bool", method "verify_byte_byte_gt(byte[],byte[])bool", method "verify_uintn_uintn_ge(byte[],byte[])bool", method "verify_biguintn_uintn_ge(byte[],byte[])bool", method "verify_uintn_biguintn_ge(byte[],byte[])bool", method "verify_biguintn_biguintn_ge(byte[],byte[])bool", method "verify_byte_byte_ge(byte[],byte[])bool", method "verify_uintn_init(byte[])uint32", method "verify_biguintn_init(byte[])uint256", method "verify_byte_init(byte[])byte", method "verify_uintn_from_bytes(byte[])uint32", method "verify_biguintn_from_bytes(byte[])uint256", method "verify_byte_from_bytes(byte[])byte", method "verify_uintn_from_log(byte[])uint32", method "verify_biguintn_from_log(byte[])uint256", method "verify_byte_from_log(byte[])byte", method "verify_ufixednxm_bytes(ufixed32x8)byte[]", method "verify_bigufixednxm_bytes(ufixed256x16)byte[]", method "verify_ufixednxm_from_bytes(byte[])ufixed32x8", method "verify_bigufixednxm_from_bytes(byte[])ufixed256x16", method "verify_ufixednxm_from_log(byte[])ufixed32x8", method "verify_bigufixednxm_from_log(byte[])ufixed256x16", method "verify_string_init(string)string", method "verify_string_add(string,string)string", method "verify_string_eq(string,string)bool", method "verify_string_bytes(string)byte[]", method "verify_string_from_bytes(byte[])string", method "verify_string_from_log(byte[])string", method "verify_bool_bytes(bool)byte[]", method "verify_bool_from_bytes(byte[])bool", method "verify_bool_from_log(byte[])bool" + bz main_bare_routing@60 + pushbytess 0x96f14116 0xed666096 0x2ca0352b 0x85907d40 0x4eb2af4a 0x2cbec45b 0x07666fd9 0x370babd3 0x2b6b3ef0 0x27e21a98 0x339da97c 0x7898ed97 0x1f130cec 0xc748664e 0xa2bac14b 0x7a460cb1 0xdcab1f01 0x97d9064d 0xce06c2a0 0x7c11e375 0xdcdbcee0 0x77a4b68d 0x4f540626 0x095aed41 0xdf78cdc6 0xe3b7e918 0x55337008 0x9bb1cd66 0x81484d9d 0x79e9cb03 0x9a03df10 0xd3f0e44b 0x673db2bd 0x982db233 0xaffbdf0e 0x8e4a30f7 0x288af76e 0x8bd84a04 0xfcd55e1f 0x0f1574fe 0xb2cb13be 0xd059eea7 0x4cc4c157 0x3d17ac6e 0xf7f3d5fc 0xf8c8f8d5 0x43f7162a 0x42e09075 0xd956f575 0x6c0160df 0xa890150b 0x0b2f4c3f 0x9db9d327 0xe4d950a1 0xb605e80c // method "verify_uintn_uintn_eq(byte[],byte[])bool", method "verify_biguintn_uintn_eq(byte[],byte[])bool", method "verify_uintn_biguintn_eq(byte[],byte[])bool", method "verify_biguintn_biguintn_eq(byte[],byte[])bool", method "verify_byte_byte_eq(byte[],byte[])bool", method "verify_uintn_uintn_ne(byte[],byte[])bool", method "verify_biguintn_uintn_ne(byte[],byte[])bool", method "verify_uintn_biguintn_ne(byte[],byte[])bool", method "verify_biguintn_biguintn_ne(byte[],byte[])bool", method "verify_byte_byte_ne(byte[],byte[])bool", method "verify_uintn_uintn_lt(byte[],byte[])bool", method "verify_biguintn_uintn_lt(byte[],byte[])bool", method "verify_uintn_biguintn_lt(byte[],byte[])bool", method "verify_biguintn_biguintn_lt(byte[],byte[])bool", method "verify_byte_byte_lt(byte[],byte[])bool", method "verify_uintn_uintn_le(byte[],byte[])bool", method "verify_biguintn_uintn_le(byte[],byte[])bool", method "verify_uintn_biguintn_le(byte[],byte[])bool", method "verify_biguintn_biguintn_le(byte[],byte[])bool", method "verify_byte_byte_le(byte[],byte[])bool", method "verify_uintn_uintn_gt(byte[],byte[])bool", method "verify_biguintn_uintn_gt(byte[],byte[])bool", method "verify_uintn_biguintn_gt(byte[],byte[])bool", method "verify_biguintn_biguintn_gt(byte[],byte[])bool", method "verify_byte_byte_gt(byte[],byte[])bool", method "verify_uintn_uintn_ge(byte[],byte[])bool", method "verify_biguintn_uintn_ge(byte[],byte[])bool", method "verify_uintn_biguintn_ge(byte[],byte[])bool", method "verify_biguintn_biguintn_ge(byte[],byte[])bool", method "verify_byte_byte_ge(byte[],byte[])bool", method "verify_uintn_init(byte[])uint32", method "verify_biguintn_init(byte[])uint256", method "verify_byte_init(byte[])byte", method "verify_uintn_from_bytes(byte[])uint32", method "verify_biguintn_from_bytes(byte[])uint256", method "verify_byte_from_bytes(byte[])byte", method "verify_uintn_from_log(byte[])uint32", method "verify_biguintn_from_log(byte[])uint256", method "verify_byte_from_log(byte[])byte", method "verify_ufixednxm_bytes(ufixed32x8)byte[]", method "verify_bigufixednxm_bytes(ufixed256x16)byte[]", method "verify_ufixednxm_from_bytes(byte[])ufixed32x8", method "verify_bigufixednxm_from_bytes(byte[])ufixed256x16", method "verify_ufixednxm_from_log(byte[])ufixed32x8", method "verify_bigufixednxm_from_log(byte[])ufixed256x16", method "verify_string_init(string)string", method "verify_string_add(string,string)string", method "verify_string_eq(string,string)bool", method "verify_string_bytes(string)byte[]", method "verify_string_from_bytes(byte[])string", method "verify_string_from_log(byte[])string", method "verify_bool_bytes(bool)byte[]", method "verify_bool_from_bytes(byte[])bool", method "verify_bool_from_log(byte[])bool", method "verify_emit(string,uint512,uint64,byte[],uint64,bool,byte[],string,uint64,uint256,ufixed32x8,ufixed256x16,bool,byte[],byte[],byte[])void" txna ApplicationArgs 0 - match __puya_arc4_router___verify_uintn_uintn_eq_route@2 __puya_arc4_router___verify_biguintn_uintn_eq_route@3 __puya_arc4_router___verify_uintn_biguintn_eq_route@4 __puya_arc4_router___verify_biguintn_biguintn_eq_route@5 __puya_arc4_router___verify_byte_byte_eq_route@6 __puya_arc4_router___verify_uintn_uintn_ne_route@7 __puya_arc4_router___verify_biguintn_uintn_ne_route@8 __puya_arc4_router___verify_uintn_biguintn_ne_route@9 __puya_arc4_router___verify_biguintn_biguintn_ne_route@10 __puya_arc4_router___verify_byte_byte_ne_route@11 __puya_arc4_router___verify_uintn_uintn_lt_route@12 __puya_arc4_router___verify_biguintn_uintn_lt_route@13 __puya_arc4_router___verify_uintn_biguintn_lt_route@14 __puya_arc4_router___verify_biguintn_biguintn_lt_route@15 __puya_arc4_router___verify_byte_byte_lt_route@16 __puya_arc4_router___verify_uintn_uintn_le_route@17 __puya_arc4_router___verify_biguintn_uintn_le_route@18 __puya_arc4_router___verify_uintn_biguintn_le_route@19 __puya_arc4_router___verify_biguintn_biguintn_le_route@20 __puya_arc4_router___verify_byte_byte_le_route@21 __puya_arc4_router___verify_uintn_uintn_gt_route@22 __puya_arc4_router___verify_biguintn_uintn_gt_route@23 __puya_arc4_router___verify_uintn_biguintn_gt_route@24 __puya_arc4_router___verify_biguintn_biguintn_gt_route@25 __puya_arc4_router___verify_byte_byte_gt_route@26 __puya_arc4_router___verify_uintn_uintn_ge_route@27 __puya_arc4_router___verify_biguintn_uintn_ge_route@28 __puya_arc4_router___verify_uintn_biguintn_ge_route@29 __puya_arc4_router___verify_biguintn_biguintn_ge_route@30 __puya_arc4_router___verify_byte_byte_ge_route@31 __puya_arc4_router___verify_uintn_init_route@32 __puya_arc4_router___verify_biguintn_init_route@33 __puya_arc4_router___verify_byte_init_route@34 __puya_arc4_router___verify_uintn_from_bytes_route@35 __puya_arc4_router___verify_biguintn_from_bytes_route@36 __puya_arc4_router___verify_byte_from_bytes_route@37 __puya_arc4_router___verify_uintn_from_log_route@38 __puya_arc4_router___verify_biguintn_from_log_route@39 __puya_arc4_router___verify_byte_from_log_route@40 __puya_arc4_router___verify_ufixednxm_bytes_route@41 __puya_arc4_router___verify_bigufixednxm_bytes_route@42 __puya_arc4_router___verify_ufixednxm_from_bytes_route@43 __puya_arc4_router___verify_bigufixednxm_from_bytes_route@44 __puya_arc4_router___verify_ufixednxm_from_log_route@45 __puya_arc4_router___verify_bigufixednxm_from_log_route@46 __puya_arc4_router___verify_string_init_route@47 __puya_arc4_router___verify_string_add_route@48 __puya_arc4_router___verify_string_eq_route@49 __puya_arc4_router___verify_string_bytes_route@50 __puya_arc4_router___verify_string_from_bytes_route@51 __puya_arc4_router___verify_string_from_log_route@52 __puya_arc4_router___verify_bool_bytes_route@53 __puya_arc4_router___verify_bool_from_bytes_route@54 __puya_arc4_router___verify_bool_from_log_route@55 + match main_verify_uintn_uintn_eq_route@3 main_verify_biguintn_uintn_eq_route@4 main_verify_uintn_biguintn_eq_route@5 main_verify_biguintn_biguintn_eq_route@6 main_verify_byte_byte_eq_route@7 main_verify_uintn_uintn_ne_route@8 main_verify_biguintn_uintn_ne_route@9 main_verify_uintn_biguintn_ne_route@10 main_verify_biguintn_biguintn_ne_route@11 main_verify_byte_byte_ne_route@12 main_verify_uintn_uintn_lt_route@13 main_verify_biguintn_uintn_lt_route@14 main_verify_uintn_biguintn_lt_route@15 main_verify_biguintn_biguintn_lt_route@16 main_verify_byte_byte_lt_route@17 main_verify_uintn_uintn_le_route@18 main_verify_biguintn_uintn_le_route@19 main_verify_uintn_biguintn_le_route@20 main_verify_biguintn_biguintn_le_route@21 main_verify_byte_byte_le_route@22 main_verify_uintn_uintn_gt_route@23 main_verify_biguintn_uintn_gt_route@24 main_verify_uintn_biguintn_gt_route@25 main_verify_biguintn_biguintn_gt_route@26 main_verify_byte_byte_gt_route@27 main_verify_uintn_uintn_ge_route@28 main_verify_biguintn_uintn_ge_route@29 main_verify_uintn_biguintn_ge_route@30 main_verify_biguintn_biguintn_ge_route@31 main_verify_byte_byte_ge_route@32 main_verify_uintn_init_route@33 main_verify_biguintn_init_route@34 main_verify_byte_init_route@35 main_verify_uintn_from_bytes_route@36 main_verify_biguintn_from_bytes_route@37 main_verify_byte_from_bytes_route@38 main_verify_uintn_from_log_route@39 main_verify_biguintn_from_log_route@40 main_verify_byte_from_log_route@41 main_verify_ufixednxm_bytes_route@42 main_verify_bigufixednxm_bytes_route@43 main_verify_ufixednxm_from_bytes_route@44 main_verify_bigufixednxm_from_bytes_route@45 main_verify_ufixednxm_from_log_route@46 main_verify_bigufixednxm_from_log_route@47 main_verify_string_init_route@48 main_verify_string_add_route@49 main_verify_string_eq_route@50 main_verify_string_bytes_route@51 main_verify_string_from_bytes_route@52 main_verify_string_from_log_route@53 main_verify_bool_bytes_route@54 main_verify_bool_from_bytes_route@55 main_verify_bool_from_log_route@56 main_verify_emit_route@57 + +main_after_if_else@64: + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:4 + // export class Arc4PrimitiveOpsContract extends Contract { intc_3 // 0 - retsub + return -__puya_arc4_router___verify_uintn_uintn_eq_route@2: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:5 +main_verify_emit_route@57: + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:349 // @arc4.abimethod() txn OnCompletion ! @@ -31,25 +30,67 @@ __puya_arc4_router___verify_uintn_uintn_eq_route@2: // tests/artifacts/arc4-primitive-ops/contract.algo.ts:4 // export class Arc4PrimitiveOpsContract extends Contract { txna ApplicationArgs 1 - extract 2 0 txna ApplicationArgs 2 + txna ApplicationArgs 3 + txna ApplicationArgs 4 + txna ApplicationArgs 5 + txna ApplicationArgs 6 + txna ApplicationArgs 7 + txna ApplicationArgs 8 + txna ApplicationArgs 9 + txna ApplicationArgs 10 + txna ApplicationArgs 11 + txna ApplicationArgs 12 + txna ApplicationArgs 13 + txna ApplicationArgs 14 + extract 2 0 + txna ApplicationArgs 15 + dup + intc_3 // 0 + extract_uint16 + dig 1 + pushint 2 // 2 + extract_uint16 + substring3 extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:5 + txna ApplicationArgs 15 + dup + pushint 2 // 2 + extract_uint16 + dig 1 + len + substring3 + extract 2 0 + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:349 // @arc4.abimethod() - callsub verify_uintn_uintn_eq - bytec_1 // 0x00 - intc_3 // 0 - uncover 2 - setbit + callsub verify_emit + intc_0 // 1 + return + +main_verify_bool_from_log_route@56: + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:343 + // @arc4.abimethod() + txn OnCompletion + ! + assert // OnCompletion is not NoOp + txn ApplicationID + assert // can only call when not creating + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:4 + // export class Arc4PrimitiveOpsContract extends Contract { + txna ApplicationArgs 1 + extract 2 0 + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:343 + // @arc4.abimethod() + callsub verify_bool_from_log bytec_0 // 0x151f7c75 swap concat log intc_0 // 1 - retsub + return -__puya_arc4_router___verify_biguintn_uintn_eq_route@3: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:13 +main_verify_bool_from_bytes_route@55: + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:339 // @arc4.abimethod() txn OnCompletion ! @@ -60,24 +101,17 @@ __puya_arc4_router___verify_biguintn_uintn_eq_route@3: // export class Arc4PrimitiveOpsContract extends Contract { txna ApplicationArgs 1 extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:13 + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:339 // @arc4.abimethod() - callsub verify_biguintn_uintn_eq - bytec_1 // 0x00 - intc_3 // 0 - uncover 2 - setbit bytec_0 // 0x151f7c75 swap concat log intc_0 // 1 - retsub + return -__puya_arc4_router___verify_uintn_biguintn_eq_route@4: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:21 +main_verify_bool_bytes_route@54: + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:335 // @arc4.abimethod() txn OnCompletion ! @@ -87,25 +121,23 @@ __puya_arc4_router___verify_uintn_biguintn_eq_route@4: // tests/artifacts/arc4-primitive-ops/contract.algo.ts:4 // export class Arc4PrimitiveOpsContract extends Contract { txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:21 + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:335 // @arc4.abimethod() - callsub verify_uintn_biguintn_eq - bytec_1 // 0x00 - intc_3 // 0 - uncover 2 - setbit + dup + len + itob + extract 6 2 + swap + concat bytec_0 // 0x151f7c75 swap concat log intc_0 // 1 - retsub + return -__puya_arc4_router___verify_biguintn_biguintn_eq_route@5: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:29 +main_verify_string_from_log_route@53: + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:331 // @arc4.abimethod() txn OnCompletion ! @@ -116,24 +148,18 @@ __puya_arc4_router___verify_biguintn_biguintn_eq_route@5: // export class Arc4PrimitiveOpsContract extends Contract { txna ApplicationArgs 1 extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:29 + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:331 // @arc4.abimethod() - callsub verify_biguintn_biguintn_eq - bytec_1 // 0x00 - intc_3 // 0 - uncover 2 - setbit + callsub verify_string_from_log bytec_0 // 0x151f7c75 swap concat log intc_0 // 1 - retsub + return -__puya_arc4_router___verify_byte_byte_eq_route@6: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:37 +main_verify_string_from_bytes_route@52: + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:327 // @arc4.abimethod() txn OnCompletion ! @@ -144,24 +170,17 @@ __puya_arc4_router___verify_byte_byte_eq_route@6: // export class Arc4PrimitiveOpsContract extends Contract { txna ApplicationArgs 1 extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:37 + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:327 // @arc4.abimethod() - callsub verify_byte_byte_eq - bytec_1 // 0x00 - intc_3 // 0 - uncover 2 - setbit bytec_0 // 0x151f7c75 swap concat log intc_0 // 1 - retsub + return -__puya_arc4_router___verify_uintn_uintn_ne_route@7: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:45 +main_verify_string_bytes_route@51: + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:322 // @arc4.abimethod() txn OnCompletion ! @@ -172,24 +191,24 @@ __puya_arc4_router___verify_uintn_uintn_ne_route@7: // export class Arc4PrimitiveOpsContract extends Contract { txna ApplicationArgs 1 extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:45 + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:322 // @arc4.abimethod() - callsub verify_uintn_uintn_ne - bytec_1 // 0x00 - intc_3 // 0 - uncover 2 - setbit + callsub verify_string_bytes + dup + len + itob + extract 6 2 + swap + concat bytec_0 // 0x151f7c75 swap concat log intc_0 // 1 - retsub + return -__puya_arc4_router___verify_biguintn_uintn_ne_route@8: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:53 +main_verify_string_eq_route@50: + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:318 // @arc4.abimethod() txn OnCompletion ! @@ -199,12 +218,10 @@ __puya_arc4_router___verify_biguintn_uintn_ne_route@8: // tests/artifacts/arc4-primitive-ops/contract.algo.ts:4 // export class Arc4PrimitiveOpsContract extends Contract { txna ApplicationArgs 1 - extract 2 0 txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:53 + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:318 // @arc4.abimethod() - callsub verify_biguintn_uintn_ne + callsub verify_string_eq bytec_1 // 0x00 intc_3 // 0 uncover 2 @@ -214,10 +231,10 @@ __puya_arc4_router___verify_biguintn_uintn_ne_route@8: concat log intc_0 // 1 - retsub + return -__puya_arc4_router___verify_uintn_biguintn_ne_route@9: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:61 +main_verify_string_add_route@49: + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:313 // @arc4.abimethod() txn OnCompletion ! @@ -227,25 +244,19 @@ __puya_arc4_router___verify_uintn_biguintn_ne_route@9: // tests/artifacts/arc4-primitive-ops/contract.algo.ts:4 // export class Arc4PrimitiveOpsContract extends Contract { txna ApplicationArgs 1 - extract 2 0 txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:61 + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:313 // @arc4.abimethod() - callsub verify_uintn_biguintn_ne - bytec_1 // 0x00 - intc_3 // 0 - uncover 2 - setbit + callsub verify_string_add bytec_0 // 0x151f7c75 swap concat log intc_0 // 1 - retsub + return -__puya_arc4_router___verify_biguintn_biguintn_ne_route@10: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:69 +main_verify_string_init_route@48: + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:308 // @arc4.abimethod() txn OnCompletion ! @@ -256,24 +267,18 @@ __puya_arc4_router___verify_biguintn_biguintn_ne_route@10: // export class Arc4PrimitiveOpsContract extends Contract { txna ApplicationArgs 1 extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:69 + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:308 // @arc4.abimethod() - callsub verify_biguintn_biguintn_ne - bytec_1 // 0x00 - intc_3 // 0 - uncover 2 - setbit + callsub verify_string_init bytec_0 // 0x151f7c75 swap concat log intc_0 // 1 - retsub + return -__puya_arc4_router___verify_byte_byte_ne_route@11: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:77 +main_verify_bigufixednxm_from_log_route@47: + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:304 // @arc4.abimethod() txn OnCompletion ! @@ -284,24 +289,18 @@ __puya_arc4_router___verify_byte_byte_ne_route@11: // export class Arc4PrimitiveOpsContract extends Contract { txna ApplicationArgs 1 extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:77 + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:304 // @arc4.abimethod() - callsub verify_byte_byte_ne - bytec_1 // 0x00 - intc_3 // 0 - uncover 2 - setbit + callsub verify_bigufixednxm_from_log bytec_0 // 0x151f7c75 swap concat log intc_0 // 1 - retsub + return -__puya_arc4_router___verify_uintn_uintn_lt_route@12: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:85 +main_verify_ufixednxm_from_log_route@46: + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:300 // @arc4.abimethod() txn OnCompletion ! @@ -312,24 +311,18 @@ __puya_arc4_router___verify_uintn_uintn_lt_route@12: // export class Arc4PrimitiveOpsContract extends Contract { txna ApplicationArgs 1 extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:85 + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:300 // @arc4.abimethod() - callsub verify_uintn_uintn_lt - bytec_1 // 0x00 - intc_3 // 0 - uncover 2 - setbit + callsub verify_ufixednxm_from_log bytec_0 // 0x151f7c75 swap concat log intc_0 // 1 - retsub + return -__puya_arc4_router___verify_biguintn_uintn_lt_route@13: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:93 +main_verify_bigufixednxm_from_bytes_route@45: + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:296 // @arc4.abimethod() txn OnCompletion ! @@ -340,24 +333,17 @@ __puya_arc4_router___verify_biguintn_uintn_lt_route@13: // export class Arc4PrimitiveOpsContract extends Contract { txna ApplicationArgs 1 extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:93 + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:296 // @arc4.abimethod() - callsub verify_biguintn_uintn_lt - bytec_1 // 0x00 - intc_3 // 0 - uncover 2 - setbit bytec_0 // 0x151f7c75 swap concat log intc_0 // 1 - retsub + return -__puya_arc4_router___verify_uintn_biguintn_lt_route@14: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:101 +main_verify_ufixednxm_from_bytes_route@44: + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:292 // @arc4.abimethod() txn OnCompletion ! @@ -368,24 +354,17 @@ __puya_arc4_router___verify_uintn_biguintn_lt_route@14: // export class Arc4PrimitiveOpsContract extends Contract { txna ApplicationArgs 1 extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:101 + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:292 // @arc4.abimethod() - callsub verify_uintn_biguintn_lt - bytec_1 // 0x00 - intc_3 // 0 - uncover 2 - setbit bytec_0 // 0x151f7c75 swap concat log intc_0 // 1 - retsub + return -__puya_arc4_router___verify_biguintn_biguintn_lt_route@15: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:109 +main_verify_bigufixednxm_bytes_route@43: + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:288 // @arc4.abimethod() txn OnCompletion ! @@ -395,25 +374,23 @@ __puya_arc4_router___verify_biguintn_biguintn_lt_route@15: // tests/artifacts/arc4-primitive-ops/contract.algo.ts:4 // export class Arc4PrimitiveOpsContract extends Contract { txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:109 + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:288 // @arc4.abimethod() - callsub verify_biguintn_biguintn_lt - bytec_1 // 0x00 - intc_3 // 0 - uncover 2 - setbit + dup + len + itob + extract 6 2 + swap + concat bytec_0 // 0x151f7c75 swap concat log intc_0 // 1 - retsub + return -__puya_arc4_router___verify_byte_byte_lt_route@16: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:117 +main_verify_ufixednxm_bytes_route@42: + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:284 // @arc4.abimethod() txn OnCompletion ! @@ -423,25 +400,23 @@ __puya_arc4_router___verify_byte_byte_lt_route@16: // tests/artifacts/arc4-primitive-ops/contract.algo.ts:4 // export class Arc4PrimitiveOpsContract extends Contract { txna ApplicationArgs 1 - extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:117 + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:284 // @arc4.abimethod() - callsub verify_byte_byte_lt - bytec_1 // 0x00 - intc_3 // 0 - uncover 2 - setbit + dup + len + itob + extract 6 2 + swap + concat bytec_0 // 0x151f7c75 swap concat log intc_0 // 1 - retsub + return -__puya_arc4_router___verify_uintn_uintn_le_route@17: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:125 +main_verify_byte_from_log_route@41: + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:280 // @arc4.abimethod() txn OnCompletion ! @@ -452,24 +427,18 @@ __puya_arc4_router___verify_uintn_uintn_le_route@17: // export class Arc4PrimitiveOpsContract extends Contract { txna ApplicationArgs 1 extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:125 + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:280 // @arc4.abimethod() - callsub verify_uintn_uintn_le - bytec_1 // 0x00 - intc_3 // 0 - uncover 2 - setbit + callsub verify_byte_from_log bytec_0 // 0x151f7c75 swap concat log intc_0 // 1 - retsub + return -__puya_arc4_router___verify_biguintn_uintn_le_route@18: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:133 +main_verify_biguintn_from_log_route@40: + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:276 // @arc4.abimethod() txn OnCompletion ! @@ -480,24 +449,18 @@ __puya_arc4_router___verify_biguintn_uintn_le_route@18: // export class Arc4PrimitiveOpsContract extends Contract { txna ApplicationArgs 1 extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:133 + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:276 // @arc4.abimethod() - callsub verify_biguintn_uintn_le - bytec_1 // 0x00 - intc_3 // 0 - uncover 2 - setbit + callsub verify_biguintn_from_log bytec_0 // 0x151f7c75 swap concat log intc_0 // 1 - retsub + return -__puya_arc4_router___verify_uintn_biguintn_le_route@19: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:141 +main_verify_uintn_from_log_route@39: + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:272 // @arc4.abimethod() txn OnCompletion ! @@ -508,24 +471,18 @@ __puya_arc4_router___verify_uintn_biguintn_le_route@19: // export class Arc4PrimitiveOpsContract extends Contract { txna ApplicationArgs 1 extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:141 + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:272 // @arc4.abimethod() - callsub verify_uintn_biguintn_le - bytec_1 // 0x00 - intc_3 // 0 - uncover 2 - setbit + callsub verify_uintn_from_log bytec_0 // 0x151f7c75 swap concat log intc_0 // 1 - retsub + return -__puya_arc4_router___verify_biguintn_biguintn_le_route@20: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:149 +main_verify_byte_from_bytes_route@38: + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:268 // @arc4.abimethod() txn OnCompletion ! @@ -536,24 +493,17 @@ __puya_arc4_router___verify_biguintn_biguintn_le_route@20: // export class Arc4PrimitiveOpsContract extends Contract { txna ApplicationArgs 1 extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:149 + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:268 // @arc4.abimethod() - callsub verify_biguintn_biguintn_le - bytec_1 // 0x00 - intc_3 // 0 - uncover 2 - setbit bytec_0 // 0x151f7c75 swap concat log intc_0 // 1 - retsub + return -__puya_arc4_router___verify_byte_byte_le_route@21: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:157 +main_verify_biguintn_from_bytes_route@37: + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:264 // @arc4.abimethod() txn OnCompletion ! @@ -564,24 +514,17 @@ __puya_arc4_router___verify_byte_byte_le_route@21: // export class Arc4PrimitiveOpsContract extends Contract { txna ApplicationArgs 1 extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:157 + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:264 // @arc4.abimethod() - callsub verify_byte_byte_le - bytec_1 // 0x00 - intc_3 // 0 - uncover 2 - setbit bytec_0 // 0x151f7c75 swap concat log intc_0 // 1 - retsub + return -__puya_arc4_router___verify_uintn_uintn_gt_route@22: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:165 +main_verify_uintn_from_bytes_route@36: + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:260 // @arc4.abimethod() txn OnCompletion ! @@ -592,24 +535,17 @@ __puya_arc4_router___verify_uintn_uintn_gt_route@22: // export class Arc4PrimitiveOpsContract extends Contract { txna ApplicationArgs 1 extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:165 + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:260 // @arc4.abimethod() - callsub verify_uintn_uintn_gt - bytec_1 // 0x00 - intc_3 // 0 - uncover 2 - setbit bytec_0 // 0x151f7c75 swap concat log intc_0 // 1 - retsub + return -__puya_arc4_router___verify_biguintn_uintn_gt_route@23: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:173 +main_verify_byte_init_route@35: + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:255 // @arc4.abimethod() txn OnCompletion ! @@ -620,24 +556,18 @@ __puya_arc4_router___verify_biguintn_uintn_gt_route@23: // export class Arc4PrimitiveOpsContract extends Contract { txna ApplicationArgs 1 extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:173 + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:255 // @arc4.abimethod() - callsub verify_biguintn_uintn_gt - bytec_1 // 0x00 - intc_3 // 0 - uncover 2 - setbit + callsub verify_byte_init bytec_0 // 0x151f7c75 swap concat log intc_0 // 1 - retsub + return -__puya_arc4_router___verify_uintn_biguintn_gt_route@24: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:181 +main_verify_biguintn_init_route@34: + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:250 // @arc4.abimethod() txn OnCompletion ! @@ -648,24 +578,18 @@ __puya_arc4_router___verify_uintn_biguintn_gt_route@24: // export class Arc4PrimitiveOpsContract extends Contract { txna ApplicationArgs 1 extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:181 + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:250 // @arc4.abimethod() - callsub verify_uintn_biguintn_gt - bytec_1 // 0x00 - intc_3 // 0 - uncover 2 - setbit + callsub verify_biguintn_init bytec_0 // 0x151f7c75 swap concat log intc_0 // 1 - retsub + return -__puya_arc4_router___verify_biguintn_biguintn_gt_route@25: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:189 +main_verify_uintn_init_route@33: + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:245 // @arc4.abimethod() txn OnCompletion ! @@ -676,24 +600,18 @@ __puya_arc4_router___verify_biguintn_biguintn_gt_route@25: // export class Arc4PrimitiveOpsContract extends Contract { txna ApplicationArgs 1 extract 2 0 - txna ApplicationArgs 2 - extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:189 + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:245 // @arc4.abimethod() - callsub verify_biguintn_biguintn_gt - bytec_1 // 0x00 - intc_3 // 0 - uncover 2 - setbit + callsub verify_uintn_init bytec_0 // 0x151f7c75 swap concat log intc_0 // 1 - retsub + return -__puya_arc4_router___verify_byte_byte_gt_route@26: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:197 +main_verify_byte_byte_ge_route@32: + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:237 // @arc4.abimethod() txn OnCompletion ! @@ -706,9 +624,9 @@ __puya_arc4_router___verify_byte_byte_gt_route@26: extract 2 0 txna ApplicationArgs 2 extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:197 + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:237 // @arc4.abimethod() - callsub verify_byte_byte_gt + callsub verify_byte_byte_ge bytec_1 // 0x00 intc_3 // 0 uncover 2 @@ -718,10 +636,10 @@ __puya_arc4_router___verify_byte_byte_gt_route@26: concat log intc_0 // 1 - retsub + return -__puya_arc4_router___verify_uintn_uintn_ge_route@27: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:205 +main_verify_biguintn_biguintn_ge_route@31: + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:229 // @arc4.abimethod() txn OnCompletion ! @@ -734,9 +652,9 @@ __puya_arc4_router___verify_uintn_uintn_ge_route@27: extract 2 0 txna ApplicationArgs 2 extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:205 + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:229 // @arc4.abimethod() - callsub verify_uintn_uintn_ge + callsub verify_biguintn_biguintn_ge bytec_1 // 0x00 intc_3 // 0 uncover 2 @@ -746,10 +664,10 @@ __puya_arc4_router___verify_uintn_uintn_ge_route@27: concat log intc_0 // 1 - retsub + return -__puya_arc4_router___verify_biguintn_uintn_ge_route@28: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:213 +main_verify_uintn_biguintn_ge_route@30: + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:221 // @arc4.abimethod() txn OnCompletion ! @@ -762,9 +680,9 @@ __puya_arc4_router___verify_biguintn_uintn_ge_route@28: extract 2 0 txna ApplicationArgs 2 extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:213 + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:221 // @arc4.abimethod() - callsub verify_biguintn_uintn_ge + callsub verify_uintn_biguintn_ge bytec_1 // 0x00 intc_3 // 0 uncover 2 @@ -774,10 +692,10 @@ __puya_arc4_router___verify_biguintn_uintn_ge_route@28: concat log intc_0 // 1 - retsub + return -__puya_arc4_router___verify_uintn_biguintn_ge_route@29: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:221 +main_verify_biguintn_uintn_ge_route@29: + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:213 // @arc4.abimethod() txn OnCompletion ! @@ -790,9 +708,9 @@ __puya_arc4_router___verify_uintn_biguintn_ge_route@29: extract 2 0 txna ApplicationArgs 2 extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:221 + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:213 // @arc4.abimethod() - callsub verify_uintn_biguintn_ge + callsub verify_biguintn_uintn_ge bytec_1 // 0x00 intc_3 // 0 uncover 2 @@ -802,10 +720,10 @@ __puya_arc4_router___verify_uintn_biguintn_ge_route@29: concat log intc_0 // 1 - retsub + return -__puya_arc4_router___verify_biguintn_biguintn_ge_route@30: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:229 +main_verify_uintn_uintn_ge_route@28: + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:205 // @arc4.abimethod() txn OnCompletion ! @@ -818,9 +736,9 @@ __puya_arc4_router___verify_biguintn_biguintn_ge_route@30: extract 2 0 txna ApplicationArgs 2 extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:229 + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:205 // @arc4.abimethod() - callsub verify_biguintn_biguintn_ge + callsub verify_uintn_uintn_ge bytec_1 // 0x00 intc_3 // 0 uncover 2 @@ -830,10 +748,10 @@ __puya_arc4_router___verify_biguintn_biguintn_ge_route@30: concat log intc_0 // 1 - retsub + return -__puya_arc4_router___verify_byte_byte_ge_route@31: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:237 +main_verify_byte_byte_gt_route@27: + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:197 // @arc4.abimethod() txn OnCompletion ! @@ -846,9 +764,9 @@ __puya_arc4_router___verify_byte_byte_ge_route@31: extract 2 0 txna ApplicationArgs 2 extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:237 + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:197 // @arc4.abimethod() - callsub verify_byte_byte_ge + callsub verify_byte_byte_gt bytec_1 // 0x00 intc_3 // 0 uncover 2 @@ -858,10 +776,10 @@ __puya_arc4_router___verify_byte_byte_ge_route@31: concat log intc_0 // 1 - retsub + return -__puya_arc4_router___verify_uintn_init_route@32: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:245 +main_verify_biguintn_biguintn_gt_route@26: + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:189 // @arc4.abimethod() txn OnCompletion ! @@ -872,18 +790,24 @@ __puya_arc4_router___verify_uintn_init_route@32: // export class Arc4PrimitiveOpsContract extends Contract { txna ApplicationArgs 1 extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:245 + txna ApplicationArgs 2 + extract 2 0 + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:189 // @arc4.abimethod() - callsub verify_uintn_init + callsub verify_biguintn_biguintn_gt + bytec_1 // 0x00 + intc_3 // 0 + uncover 2 + setbit bytec_0 // 0x151f7c75 swap concat log intc_0 // 1 - retsub + return -__puya_arc4_router___verify_biguintn_init_route@33: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:250 +main_verify_uintn_biguintn_gt_route@25: + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:181 // @arc4.abimethod() txn OnCompletion ! @@ -894,18 +818,24 @@ __puya_arc4_router___verify_biguintn_init_route@33: // export class Arc4PrimitiveOpsContract extends Contract { txna ApplicationArgs 1 extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:250 + txna ApplicationArgs 2 + extract 2 0 + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:181 // @arc4.abimethod() - callsub verify_biguintn_init + callsub verify_uintn_biguintn_gt + bytec_1 // 0x00 + intc_3 // 0 + uncover 2 + setbit bytec_0 // 0x151f7c75 swap concat log intc_0 // 1 - retsub + return -__puya_arc4_router___verify_byte_init_route@34: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:255 +main_verify_biguintn_uintn_gt_route@24: + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:173 // @arc4.abimethod() txn OnCompletion ! @@ -916,18 +846,24 @@ __puya_arc4_router___verify_byte_init_route@34: // export class Arc4PrimitiveOpsContract extends Contract { txna ApplicationArgs 1 extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:255 + txna ApplicationArgs 2 + extract 2 0 + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:173 // @arc4.abimethod() - callsub verify_byte_init + callsub verify_biguintn_uintn_gt + bytec_1 // 0x00 + intc_3 // 0 + uncover 2 + setbit bytec_0 // 0x151f7c75 swap concat log intc_0 // 1 - retsub + return -__puya_arc4_router___verify_uintn_from_bytes_route@35: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:260 +main_verify_uintn_uintn_gt_route@23: + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:165 // @arc4.abimethod() txn OnCompletion ! @@ -938,18 +874,24 @@ __puya_arc4_router___verify_uintn_from_bytes_route@35: // export class Arc4PrimitiveOpsContract extends Contract { txna ApplicationArgs 1 extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:260 + txna ApplicationArgs 2 + extract 2 0 + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:165 // @arc4.abimethod() - callsub verify_uintn_from_bytes + callsub verify_uintn_uintn_gt + bytec_1 // 0x00 + intc_3 // 0 + uncover 2 + setbit bytec_0 // 0x151f7c75 swap concat log intc_0 // 1 - retsub + return -__puya_arc4_router___verify_biguintn_from_bytes_route@36: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:264 +main_verify_byte_byte_le_route@22: + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:157 // @arc4.abimethod() txn OnCompletion ! @@ -960,18 +902,24 @@ __puya_arc4_router___verify_biguintn_from_bytes_route@36: // export class Arc4PrimitiveOpsContract extends Contract { txna ApplicationArgs 1 extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:264 + txna ApplicationArgs 2 + extract 2 0 + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:157 // @arc4.abimethod() - callsub verify_biguintn_from_bytes + callsub verify_byte_byte_le + bytec_1 // 0x00 + intc_3 // 0 + uncover 2 + setbit bytec_0 // 0x151f7c75 swap concat log intc_0 // 1 - retsub + return -__puya_arc4_router___verify_byte_from_bytes_route@37: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:268 +main_verify_biguintn_biguintn_le_route@21: + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:149 // @arc4.abimethod() txn OnCompletion ! @@ -982,18 +930,24 @@ __puya_arc4_router___verify_byte_from_bytes_route@37: // export class Arc4PrimitiveOpsContract extends Contract { txna ApplicationArgs 1 extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:268 + txna ApplicationArgs 2 + extract 2 0 + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:149 // @arc4.abimethod() - callsub verify_byte_from_bytes + callsub verify_biguintn_biguintn_le + bytec_1 // 0x00 + intc_3 // 0 + uncover 2 + setbit bytec_0 // 0x151f7c75 swap concat log intc_0 // 1 - retsub + return -__puya_arc4_router___verify_uintn_from_log_route@38: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:272 +main_verify_uintn_biguintn_le_route@20: + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:141 // @arc4.abimethod() txn OnCompletion ! @@ -1004,18 +958,24 @@ __puya_arc4_router___verify_uintn_from_log_route@38: // export class Arc4PrimitiveOpsContract extends Contract { txna ApplicationArgs 1 extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:272 + txna ApplicationArgs 2 + extract 2 0 + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:141 // @arc4.abimethod() - callsub verify_uintn_from_log + callsub verify_uintn_biguintn_le + bytec_1 // 0x00 + intc_3 // 0 + uncover 2 + setbit bytec_0 // 0x151f7c75 swap concat log intc_0 // 1 - retsub + return -__puya_arc4_router___verify_biguintn_from_log_route@39: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:276 +main_verify_biguintn_uintn_le_route@19: + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:133 // @arc4.abimethod() txn OnCompletion ! @@ -1026,18 +986,24 @@ __puya_arc4_router___verify_biguintn_from_log_route@39: // export class Arc4PrimitiveOpsContract extends Contract { txna ApplicationArgs 1 extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:276 + txna ApplicationArgs 2 + extract 2 0 + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:133 // @arc4.abimethod() - callsub verify_biguintn_from_log + callsub verify_biguintn_uintn_le + bytec_1 // 0x00 + intc_3 // 0 + uncover 2 + setbit bytec_0 // 0x151f7c75 swap concat log intc_0 // 1 - retsub + return -__puya_arc4_router___verify_byte_from_log_route@40: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:280 +main_verify_uintn_uintn_le_route@18: + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:125 // @arc4.abimethod() txn OnCompletion ! @@ -1048,18 +1014,24 @@ __puya_arc4_router___verify_byte_from_log_route@40: // export class Arc4PrimitiveOpsContract extends Contract { txna ApplicationArgs 1 extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:280 + txna ApplicationArgs 2 + extract 2 0 + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:125 // @arc4.abimethod() - callsub verify_byte_from_log + callsub verify_uintn_uintn_le + bytec_1 // 0x00 + intc_3 // 0 + uncover 2 + setbit bytec_0 // 0x151f7c75 swap concat log intc_0 // 1 - retsub + return -__puya_arc4_router___verify_ufixednxm_bytes_route@41: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:284 +main_verify_byte_byte_lt_route@17: + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:117 // @arc4.abimethod() txn OnCompletion ! @@ -1069,24 +1041,25 @@ __puya_arc4_router___verify_ufixednxm_bytes_route@41: // tests/artifacts/arc4-primitive-ops/contract.algo.ts:4 // export class Arc4PrimitiveOpsContract extends Contract { txna ApplicationArgs 1 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:284 + extract 2 0 + txna ApplicationArgs 2 + extract 2 0 + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:117 // @arc4.abimethod() - callsub verify_ufixednxm_bytes - dup - len - itob - extract 6 2 - swap - concat + callsub verify_byte_byte_lt + bytec_1 // 0x00 + intc_3 // 0 + uncover 2 + setbit bytec_0 // 0x151f7c75 swap concat log intc_0 // 1 - retsub + return -__puya_arc4_router___verify_bigufixednxm_bytes_route@42: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:288 +main_verify_biguintn_biguintn_lt_route@16: + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:109 // @arc4.abimethod() txn OnCompletion ! @@ -1096,24 +1069,25 @@ __puya_arc4_router___verify_bigufixednxm_bytes_route@42: // tests/artifacts/arc4-primitive-ops/contract.algo.ts:4 // export class Arc4PrimitiveOpsContract extends Contract { txna ApplicationArgs 1 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:288 + extract 2 0 + txna ApplicationArgs 2 + extract 2 0 + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:109 // @arc4.abimethod() - callsub verify_bigufixednxm_bytes - dup - len - itob - extract 6 2 - swap - concat + callsub verify_biguintn_biguintn_lt + bytec_1 // 0x00 + intc_3 // 0 + uncover 2 + setbit bytec_0 // 0x151f7c75 swap concat log intc_0 // 1 - retsub + return -__puya_arc4_router___verify_ufixednxm_from_bytes_route@43: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:292 +main_verify_uintn_biguintn_lt_route@15: + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:101 // @arc4.abimethod() txn OnCompletion ! @@ -1124,18 +1098,24 @@ __puya_arc4_router___verify_ufixednxm_from_bytes_route@43: // export class Arc4PrimitiveOpsContract extends Contract { txna ApplicationArgs 1 extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:292 + txna ApplicationArgs 2 + extract 2 0 + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:101 // @arc4.abimethod() - callsub verify_ufixednxm_from_bytes + callsub verify_uintn_biguintn_lt + bytec_1 // 0x00 + intc_3 // 0 + uncover 2 + setbit bytec_0 // 0x151f7c75 swap concat log intc_0 // 1 - retsub + return -__puya_arc4_router___verify_bigufixednxm_from_bytes_route@44: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:296 +main_verify_biguintn_uintn_lt_route@14: + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:93 // @arc4.abimethod() txn OnCompletion ! @@ -1146,18 +1126,24 @@ __puya_arc4_router___verify_bigufixednxm_from_bytes_route@44: // export class Arc4PrimitiveOpsContract extends Contract { txna ApplicationArgs 1 extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:296 + txna ApplicationArgs 2 + extract 2 0 + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:93 // @arc4.abimethod() - callsub verify_bigufixednxm_from_bytes + callsub verify_biguintn_uintn_lt + bytec_1 // 0x00 + intc_3 // 0 + uncover 2 + setbit bytec_0 // 0x151f7c75 swap concat log intc_0 // 1 - retsub + return -__puya_arc4_router___verify_ufixednxm_from_log_route@45: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:300 +main_verify_uintn_uintn_lt_route@13: + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:85 // @arc4.abimethod() txn OnCompletion ! @@ -1168,18 +1154,24 @@ __puya_arc4_router___verify_ufixednxm_from_log_route@45: // export class Arc4PrimitiveOpsContract extends Contract { txna ApplicationArgs 1 extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:300 + txna ApplicationArgs 2 + extract 2 0 + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:85 // @arc4.abimethod() - callsub verify_ufixednxm_from_log + callsub verify_uintn_uintn_lt + bytec_1 // 0x00 + intc_3 // 0 + uncover 2 + setbit bytec_0 // 0x151f7c75 swap concat log intc_0 // 1 - retsub + return -__puya_arc4_router___verify_bigufixednxm_from_log_route@46: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:304 +main_verify_byte_byte_ne_route@12: + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:77 // @arc4.abimethod() txn OnCompletion ! @@ -1190,18 +1182,24 @@ __puya_arc4_router___verify_bigufixednxm_from_log_route@46: // export class Arc4PrimitiveOpsContract extends Contract { txna ApplicationArgs 1 extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:304 + txna ApplicationArgs 2 + extract 2 0 + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:77 // @arc4.abimethod() - callsub verify_bigufixednxm_from_log + callsub verify_byte_byte_ne + bytec_1 // 0x00 + intc_3 // 0 + uncover 2 + setbit bytec_0 // 0x151f7c75 swap concat log intc_0 // 1 - retsub + return -__puya_arc4_router___verify_string_init_route@47: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:308 +main_verify_biguintn_biguintn_ne_route@11: + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:69 // @arc4.abimethod() txn OnCompletion ! @@ -1212,18 +1210,24 @@ __puya_arc4_router___verify_string_init_route@47: // export class Arc4PrimitiveOpsContract extends Contract { txna ApplicationArgs 1 extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:308 + txna ApplicationArgs 2 + extract 2 0 + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:69 // @arc4.abimethod() - callsub verify_string_init + callsub verify_biguintn_biguintn_ne + bytec_1 // 0x00 + intc_3 // 0 + uncover 2 + setbit bytec_0 // 0x151f7c75 swap concat log intc_0 // 1 - retsub + return -__puya_arc4_router___verify_string_add_route@48: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:313 +main_verify_uintn_biguintn_ne_route@10: + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:61 // @arc4.abimethod() txn OnCompletion ! @@ -1233,19 +1237,25 @@ __puya_arc4_router___verify_string_add_route@48: // tests/artifacts/arc4-primitive-ops/contract.algo.ts:4 // export class Arc4PrimitiveOpsContract extends Contract { txna ApplicationArgs 1 + extract 2 0 txna ApplicationArgs 2 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:313 + extract 2 0 + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:61 // @arc4.abimethod() - callsub verify_string_add + callsub verify_uintn_biguintn_ne + bytec_1 // 0x00 + intc_3 // 0 + uncover 2 + setbit bytec_0 // 0x151f7c75 swap concat log intc_0 // 1 - retsub + return -__puya_arc4_router___verify_string_eq_route@49: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:318 +main_verify_biguintn_uintn_ne_route@9: + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:53 // @arc4.abimethod() txn OnCompletion ! @@ -1255,10 +1265,12 @@ __puya_arc4_router___verify_string_eq_route@49: // tests/artifacts/arc4-primitive-ops/contract.algo.ts:4 // export class Arc4PrimitiveOpsContract extends Contract { txna ApplicationArgs 1 + extract 2 0 txna ApplicationArgs 2 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:318 + extract 2 0 + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:53 // @arc4.abimethod() - callsub verify_string_eq + callsub verify_biguintn_uintn_ne bytec_1 // 0x00 intc_3 // 0 uncover 2 @@ -1268,10 +1280,10 @@ __puya_arc4_router___verify_string_eq_route@49: concat log intc_0 // 1 - retsub + return -__puya_arc4_router___verify_string_bytes_route@50: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:322 +main_verify_uintn_uintn_ne_route@8: + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:45 // @arc4.abimethod() txn OnCompletion ! @@ -1282,24 +1294,24 @@ __puya_arc4_router___verify_string_bytes_route@50: // export class Arc4PrimitiveOpsContract extends Contract { txna ApplicationArgs 1 extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:322 + txna ApplicationArgs 2 + extract 2 0 + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:45 // @arc4.abimethod() - callsub verify_string_bytes - dup - len - itob - extract 6 2 - swap - concat + callsub verify_uintn_uintn_ne + bytec_1 // 0x00 + intc_3 // 0 + uncover 2 + setbit bytec_0 // 0x151f7c75 swap concat log intc_0 // 1 - retsub + return -__puya_arc4_router___verify_string_from_bytes_route@51: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:327 +main_verify_byte_byte_eq_route@7: + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:37 // @arc4.abimethod() txn OnCompletion ! @@ -1310,18 +1322,24 @@ __puya_arc4_router___verify_string_from_bytes_route@51: // export class Arc4PrimitiveOpsContract extends Contract { txna ApplicationArgs 1 extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:327 + txna ApplicationArgs 2 + extract 2 0 + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:37 // @arc4.abimethod() - callsub verify_string_from_bytes + callsub verify_byte_byte_eq + bytec_1 // 0x00 + intc_3 // 0 + uncover 2 + setbit bytec_0 // 0x151f7c75 swap concat log intc_0 // 1 - retsub + return -__puya_arc4_router___verify_string_from_log_route@52: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:331 +main_verify_biguintn_biguintn_eq_route@6: + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:29 // @arc4.abimethod() txn OnCompletion ! @@ -1332,18 +1350,24 @@ __puya_arc4_router___verify_string_from_log_route@52: // export class Arc4PrimitiveOpsContract extends Contract { txna ApplicationArgs 1 extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:331 + txna ApplicationArgs 2 + extract 2 0 + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:29 // @arc4.abimethod() - callsub verify_string_from_log + callsub verify_biguintn_biguintn_eq + bytec_1 // 0x00 + intc_3 // 0 + uncover 2 + setbit bytec_0 // 0x151f7c75 swap concat log intc_0 // 1 - retsub + return -__puya_arc4_router___verify_bool_bytes_route@53: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:335 +main_verify_uintn_biguintn_eq_route@5: + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:21 // @arc4.abimethod() txn OnCompletion ! @@ -1353,24 +1377,25 @@ __puya_arc4_router___verify_bool_bytes_route@53: // tests/artifacts/arc4-primitive-ops/contract.algo.ts:4 // export class Arc4PrimitiveOpsContract extends Contract { txna ApplicationArgs 1 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:335 + extract 2 0 + txna ApplicationArgs 2 + extract 2 0 + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:21 // @arc4.abimethod() - callsub verify_bool_bytes - dup - len - itob - extract 6 2 - swap - concat + callsub verify_uintn_biguintn_eq + bytec_1 // 0x00 + intc_3 // 0 + uncover 2 + setbit bytec_0 // 0x151f7c75 swap concat log intc_0 // 1 - retsub + return -__puya_arc4_router___verify_bool_from_bytes_route@54: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:339 +main_verify_biguintn_uintn_eq_route@4: + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:13 // @arc4.abimethod() txn OnCompletion ! @@ -1381,18 +1406,24 @@ __puya_arc4_router___verify_bool_from_bytes_route@54: // export class Arc4PrimitiveOpsContract extends Contract { txna ApplicationArgs 1 extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:339 + txna ApplicationArgs 2 + extract 2 0 + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:13 // @arc4.abimethod() - callsub verify_bool_from_bytes + callsub verify_biguintn_uintn_eq + bytec_1 // 0x00 + intc_3 // 0 + uncover 2 + setbit bytec_0 // 0x151f7c75 swap concat log intc_0 // 1 - retsub + return -__puya_arc4_router___verify_bool_from_log_route@55: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:343 +main_verify_uintn_uintn_eq_route@3: + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:5 // @arc4.abimethod() txn OnCompletion ! @@ -1403,32 +1434,32 @@ __puya_arc4_router___verify_bool_from_log_route@55: // export class Arc4PrimitiveOpsContract extends Contract { txna ApplicationArgs 1 extract 2 0 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:343 + txna ApplicationArgs 2 + extract 2 0 + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:5 // @arc4.abimethod() - callsub verify_bool_from_log + callsub verify_uintn_uintn_eq + bytec_1 // 0x00 + intc_3 // 0 + uncover 2 + setbit bytec_0 // 0x151f7c75 swap concat log intc_0 // 1 - retsub + return -__puya_arc4_router___bare_routing@58: +main_bare_routing@60: // tests/artifacts/arc4-primitive-ops/contract.algo.ts:4 // export class Arc4PrimitiveOpsContract extends Contract { txn OnCompletion - bnz __puya_arc4_router___after_if_else@62 + bnz main_after_if_else@64 txn ApplicationID ! assert // can only call when creating intc_0 // 1 - retsub - -__puya_arc4_router___after_if_else@62: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:4 - // export class Arc4PrimitiveOpsContract extends Contract { - intc_3 // 0 - retsub + return // tests/artifacts/arc4-primitive-ops/contract.algo.ts::Arc4PrimitiveOpsContract.verify_uintn_uintn_eq(a: bytes, b: bytes) -> uint64: @@ -2565,42 +2596,6 @@ verify_byte_init: retsub -// tests/artifacts/arc4-primitive-ops/contract.algo.ts::Arc4PrimitiveOpsContract.verify_uintn_from_bytes(a: bytes) -> bytes: -verify_uintn_from_bytes: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:260-261 - // @arc4.abimethod() - // public verify_uintn_from_bytes(a: bytes): UintN<32> { - proto 1 1 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:262 - // return interpretAsArc4>(a) - frame_dig -1 - retsub - - -// tests/artifacts/arc4-primitive-ops/contract.algo.ts::Arc4PrimitiveOpsContract.verify_biguintn_from_bytes(a: bytes) -> bytes: -verify_biguintn_from_bytes: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:264-265 - // @arc4.abimethod() - // public verify_biguintn_from_bytes(a: bytes): UintN<256> { - proto 1 1 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:266 - // return interpretAsArc4>(a) - frame_dig -1 - retsub - - -// tests/artifacts/arc4-primitive-ops/contract.algo.ts::Arc4PrimitiveOpsContract.verify_byte_from_bytes(a: bytes) -> bytes: -verify_byte_from_bytes: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:268-269 - // @arc4.abimethod() - // public verify_byte_from_bytes(a: bytes): Byte { - proto 1 1 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:270 - // return interpretAsArc4(a) - frame_dig -1 - retsub - - // tests/artifacts/arc4-primitive-ops/contract.algo.ts::Arc4PrimitiveOpsContract.verify_uintn_from_log(a: bytes) -> bytes: verify_uintn_from_log: // tests/artifacts/arc4-primitive-ops/contract.algo.ts:272-273 @@ -2655,54 +2650,6 @@ verify_byte_from_log: retsub -// tests/artifacts/arc4-primitive-ops/contract.algo.ts::Arc4PrimitiveOpsContract.verify_ufixednxm_bytes(a: bytes) -> bytes: -verify_ufixednxm_bytes: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:284-285 - // @arc4.abimethod() - // public verify_ufixednxm_bytes(a: UFixedNxM<32, 8>): bytes { - proto 1 1 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:286 - // return a.bytes - frame_dig -1 - retsub - - -// tests/artifacts/arc4-primitive-ops/contract.algo.ts::Arc4PrimitiveOpsContract.verify_bigufixednxm_bytes(a: bytes) -> bytes: -verify_bigufixednxm_bytes: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:288-289 - // @arc4.abimethod() - // public verify_bigufixednxm_bytes(a: UFixedNxM<256, 16>): bytes { - proto 1 1 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:290 - // return a.bytes - frame_dig -1 - retsub - - -// tests/artifacts/arc4-primitive-ops/contract.algo.ts::Arc4PrimitiveOpsContract.verify_ufixednxm_from_bytes(a: bytes) -> bytes: -verify_ufixednxm_from_bytes: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:292-293 - // @arc4.abimethod() - // public verify_ufixednxm_from_bytes(a: bytes): UFixedNxM<32, 8> { - proto 1 1 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:294 - // return interpretAsArc4>(a) - frame_dig -1 - retsub - - -// tests/artifacts/arc4-primitive-ops/contract.algo.ts::Arc4PrimitiveOpsContract.verify_bigufixednxm_from_bytes(a: bytes) -> bytes: -verify_bigufixednxm_from_bytes: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:296-297 - // @arc4.abimethod() - // public verify_bigufixednxm_from_bytes(a: bytes): UFixedNxM<256, 16> { - proto 1 1 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:298 - // return interpretAsArc4>(a) - frame_dig -1 - retsub - - // tests/artifacts/arc4-primitive-ops/contract.algo.ts::Arc4PrimitiveOpsContract.verify_ufixednxm_from_log(a: bytes) -> bytes: verify_ufixednxm_from_log: // tests/artifacts/arc4-primitive-ops/contract.algo.ts:300-301 @@ -2818,18 +2765,6 @@ verify_string_bytes: retsub -// tests/artifacts/arc4-primitive-ops/contract.algo.ts::Arc4PrimitiveOpsContract.verify_string_from_bytes(a: bytes) -> bytes: -verify_string_from_bytes: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:327-328 - // @arc4.abimethod() - // public verify_string_from_bytes(a: bytes): Str { - proto 1 1 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:329 - // return interpretAsArc4(a) - frame_dig -1 - retsub - - // tests/artifacts/arc4-primitive-ops/contract.algo.ts::Arc4PrimitiveOpsContract.verify_string_from_log(a: bytes) -> bytes: verify_string_from_log: // tests/artifacts/arc4-primitive-ops/contract.algo.ts:331-332 @@ -2848,30 +2783,6 @@ verify_string_from_log: retsub -// tests/artifacts/arc4-primitive-ops/contract.algo.ts::Arc4PrimitiveOpsContract.verify_bool_bytes(a: bytes) -> bytes: -verify_bool_bytes: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:335-336 - // @arc4.abimethod() - // public verify_bool_bytes(a: Bool): bytes { - proto 1 1 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:337 - // return a.bytes - frame_dig -1 - retsub - - -// tests/artifacts/arc4-primitive-ops/contract.algo.ts::Arc4PrimitiveOpsContract.verify_bool_from_bytes(a: bytes) -> bytes: -verify_bool_from_bytes: - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:339-340 - // @arc4.abimethod() - // public verify_bool_from_bytes(a: bytes): Bool { - proto 1 1 - // tests/artifacts/arc4-primitive-ops/contract.algo.ts:341 - // return interpretAsArc4(a) - frame_dig -1 - retsub - - // tests/artifacts/arc4-primitive-ops/contract.algo.ts::Arc4PrimitiveOpsContract.verify_bool_from_log(a: bytes) -> bytes: verify_bool_from_log: // tests/artifacts/arc4-primitive-ops/contract.algo.ts:343-344 @@ -2888,3 +2799,167 @@ verify_bool_from_log: == assert // Bytes has valid prefix retsub + + +// tests/artifacts/arc4-primitive-ops/contract.algo.ts::Arc4PrimitiveOpsContract.verify_emit(a: bytes, b: bytes, c: bytes, d: bytes, e: bytes, f: bytes, g: bytes, h: bytes, m: bytes, n: bytes, o: bytes, p: bytes, q: bytes, r: bytes, s: bytes, t: bytes) -> void: +verify_emit: + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:349-367 + // @arc4.abimethod() + // public verify_emit( + // a: arc4.Str, + // b: arc4.UintN<512>, + // c: arc4.UintN64, + // d: arc4.DynamicBytes, + // e: arc4.UintN64, + // f: arc4.Bool, + // g: arc4.DynamicBytes, + // h: arc4.Str, + // m: arc4.UintN<64>, + // n: arc4.UintN<256>, + // o: arc4.UFixedNxM<32, 8>, + // p: arc4.UFixedNxM<256, 16>, + // q: arc4.Bool, + // r: bytes, + // s: bytes, + // t: bytes, + // ): void { + proto 16 0 + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:372 + // emit(new SwappedArc4({ m, n, o, p, q, r: arc4_r, s: arc4_s, t: arc4_t })) + frame_dig -8 + frame_dig -7 + concat + frame_dig -6 + concat + frame_dig -5 + concat + frame_dig -4 + concat + frame_dig -3 + concat + pushbytes 0x0054 + concat + frame_dig -2 + len + pushint 84 // 84 + dig 1 + + + itob + extract 6 2 + uncover 2 + swap + concat + frame_dig -2 + concat + frame_dig -1 + concat + pushbytes 0x66bb0333 // method "SwappedArc4(uint64,uint256,ufixed32x8,ufixed256x16,bool,uint8[3],uint16[],(uint32,uint64,string))" + swap + concat + log + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:373 + // emit('Swapped', a, b, c, d, e, f, g, h, m, n, o, p, q, arc4_r.copy(), arc4_s.copy(), arc4_t) + frame_dig -16 + len + pushint 173 // 173 + + + pushbytes 0x00ad + frame_dig -15 + concat + frame_dig -14 + concat + dig 1 + itob + extract 6 2 + concat + frame_dig -13 + len + uncover 2 + + + swap + frame_dig -12 + concat + frame_dig -11 + concat + dig 1 + itob + extract 6 2 + concat + frame_dig -10 + len + uncover 2 + + + dup + itob + extract 6 2 + uncover 2 + swap + concat + frame_dig -9 + len + uncover 2 + + + swap + frame_dig -8 + concat + frame_dig -7 + concat + frame_dig -6 + concat + frame_dig -5 + concat + frame_dig -4 + concat + frame_dig -3 + concat + dig 1 + itob + extract 6 2 + concat + swap + uncover 2 + + + itob + extract 6 2 + concat + frame_dig -16 + concat + frame_dig -13 + concat + frame_dig -10 + concat + frame_dig -9 + concat + frame_dig -2 + concat + frame_dig -1 + concat + pushbytes 0xec3319bb // method "Swapped(string,uint512,uint64,byte[],uint64,bool,byte[],string,uint64,uint256,ufixed32x8,ufixed256x16,bool,uint8[3],uint16[],(uint32,uint64,string))" + dig 1 + concat + log + // tests/artifacts/arc4-primitive-ops/contract.algo.ts:374-392 + // emit( + // 'Swapped(string,uint512,uint64,byte[],uint64,bool,byte[],string,uint64,uint256,ufixed32x8,ufixed256x16,bool,uint8[3],uint16[],(uint32,uint64,string))', + // a, + // b, + // c, + // d, + // e, + // f, + // g, + // h, + // m, + // n, + // o, + // p, + // q, + // arc4_r.copy(), + // arc4_s.copy(), + // arc4_t, + // ) + pushbytes 0xec3319bb // method "Swapped(string,uint512,uint64,byte[],uint64,bool,byte[],string,uint64,uint256,ufixed32x8,ufixed256x16,bool,uint8[3],uint16[],(uint32,uint64,string))" + swap + concat + log + retsub diff --git a/tests/artifacts/arc4-primitive-ops/data/Arc4PrimitiveOpsContract.arc32.json b/tests/artifacts/arc4-primitive-ops/data/Arc4PrimitiveOpsContract.arc32.json index 7d20805..5da0118 100644 --- a/tests/artifacts/arc4-primitive-ops/data/Arc4PrimitiveOpsContract.arc32.json +++ b/tests/artifacts/arc4-primitive-ops/data/Arc4PrimitiveOpsContract.arc32.json @@ -1,1137 +1,1215 @@ { - "hints": { - "verify_uintn_uintn_eq(byte[],byte[])bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_biguintn_uintn_eq(byte[],byte[])bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_uintn_biguintn_eq(byte[],byte[])bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_biguintn_biguintn_eq(byte[],byte[])bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_byte_byte_eq(byte[],byte[])bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_uintn_uintn_ne(byte[],byte[])bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_biguintn_uintn_ne(byte[],byte[])bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_uintn_biguintn_ne(byte[],byte[])bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_biguintn_biguintn_ne(byte[],byte[])bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_byte_byte_ne(byte[],byte[])bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_uintn_uintn_lt(byte[],byte[])bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_biguintn_uintn_lt(byte[],byte[])bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_uintn_biguintn_lt(byte[],byte[])bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_biguintn_biguintn_lt(byte[],byte[])bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_byte_byte_lt(byte[],byte[])bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_uintn_uintn_le(byte[],byte[])bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_biguintn_uintn_le(byte[],byte[])bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_uintn_biguintn_le(byte[],byte[])bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_biguintn_biguintn_le(byte[],byte[])bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_byte_byte_le(byte[],byte[])bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_uintn_uintn_gt(byte[],byte[])bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_biguintn_uintn_gt(byte[],byte[])bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_uintn_biguintn_gt(byte[],byte[])bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_biguintn_biguintn_gt(byte[],byte[])bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_byte_byte_gt(byte[],byte[])bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_uintn_uintn_ge(byte[],byte[])bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_biguintn_uintn_ge(byte[],byte[])bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_uintn_biguintn_ge(byte[],byte[])bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_biguintn_biguintn_ge(byte[],byte[])bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_byte_byte_ge(byte[],byte[])bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_uintn_init(byte[])uint32": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_biguintn_init(byte[])uint256": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_byte_init(byte[])byte": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_uintn_from_bytes(byte[])uint32": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_biguintn_from_bytes(byte[])uint256": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_byte_from_bytes(byte[])byte": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_uintn_from_log(byte[])uint32": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_biguintn_from_log(byte[])uint256": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_byte_from_log(byte[])byte": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_ufixednxm_bytes(ufixed32x8)byte[]": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_bigufixednxm_bytes(ufixed256x16)byte[]": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_ufixednxm_from_bytes(byte[])ufixed32x8": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_bigufixednxm_from_bytes(byte[])ufixed256x16": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_ufixednxm_from_log(byte[])ufixed32x8": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_bigufixednxm_from_log(byte[])ufixed256x16": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_string_init(string)string": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_string_add(string,string)string": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_string_eq(string,string)bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_string_bytes(string)byte[]": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_string_from_bytes(byte[])string": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_string_from_log(byte[])string": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_bool_bytes(bool)byte[]": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_bool_from_bytes(byte[])bool": { - "call_config": { - "no_op": "CALL" - } - }, - "verify_bool_from_log(byte[])bool": { - "call_config": { - "no_op": "CALL" - } - } + "hints": { + "verify_uintn_uintn_eq(byte[],byte[])bool": { + "call_config": { + "no_op": "CALL" + } }, - "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC5hcHByb3ZhbFByb2dyYW06CiAgICBpbnRjYmxvY2sgMSA4IDY0IDAKICAgIGJ5dGVjYmxvY2sgMHgxNTFmN2M3NSAweDAwCiAgICBjYWxsc3ViIF9fcHV5YV9hcmM0X3JvdXRlcl9fCiAgICByZXR1cm4KCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC5fX3B1eWFfYXJjNF9yb3V0ZXJfXygpIC0+IHVpbnQ2NDoKX19wdXlhX2FyYzRfcm91dGVyX186CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHByb3RvIDAgMQogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IF9fcHV5YV9hcmM0X3JvdXRlcl9fX2JhcmVfcm91dGluZ0A1OAogICAgcHVzaGJ5dGVzcyAweDk2ZjE0MTE2IDB4ZWQ2NjYwOTYgMHgyY2EwMzUyYiAweDg1OTA3ZDQwIDB4NGViMmFmNGEgMHgyY2JlYzQ1YiAweDA3NjY2ZmQ5IDB4MzcwYmFiZDMgMHgyYjZiM2VmMCAweDI3ZTIxYTk4IDB4MzM5ZGE5N2MgMHg3ODk4ZWQ5NyAweDFmMTMwY2VjIDB4Yzc0ODY2NGUgMHhhMmJhYzE0YiAweDdhNDYwY2IxIDB4ZGNhYjFmMDEgMHg5N2Q5MDY0ZCAweGNlMDZjMmEwIDB4N2MxMWUzNzUgMHhkY2RiY2VlMCAweDc3YTRiNjhkIDB4NGY1NDA2MjYgMHgwOTVhZWQ0MSAweGRmNzhjZGM2IDB4ZTNiN2U5MTggMHg1NTMzNzAwOCAweDliYjFjZDY2IDB4ODE0ODRkOWQgMHg3OWU5Y2IwMyAweDlhMDNkZjEwIDB4ZDNmMGU0NGIgMHg2NzNkYjJiZCAweDk4MmRiMjMzIDB4YWZmYmRmMGUgMHg4ZTRhMzBmNyAweDI4OGFmNzZlIDB4OGJkODRhMDQgMHhmY2Q1NWUxZiAweDBmMTU3NGZlIDB4YjJjYjEzYmUgMHhkMDU5ZWVhNyAweDRjYzRjMTU3IDB4M2QxN2FjNmUgMHhmN2YzZDVmYyAweGY4YzhmOGQ1IDB4NDNmNzE2MmEgMHg0MmUwOTA3NSAweGQ5NTZmNTc1IDB4NmMwMTYwZGYgMHhhODkwMTUwYiAweDBiMmY0YzNmIDB4OWRiOWQzMjcgMHhlNGQ5NTBhMSAvLyBtZXRob2QgInZlcmlmeV91aW50bl91aW50bl9lcShieXRlW10sYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV9iaWd1aW50bl91aW50bl9lcShieXRlW10sYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV91aW50bl9iaWd1aW50bl9lcShieXRlW10sYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9lcShieXRlW10sYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV9ieXRlX2J5dGVfZXEoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfdWludG5fdWludG5fbmUoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfYmlndWludG5fdWludG5fbmUoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfdWludG5fYmlndWludG5fbmUoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfYmlndWludG5fYmlndWludG5fbmUoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfYnl0ZV9ieXRlX25lKGJ5dGVbXSxieXRlW10pYm9vbCIsIG1ldGhvZCAidmVyaWZ5X3VpbnRuX3VpbnRuX2x0KGJ5dGVbXSxieXRlW10pYm9vbCIsIG1ldGhvZCAidmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2x0KGJ5dGVbXSxieXRlW10pYm9vbCIsIG1ldGhvZCAidmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX2x0KGJ5dGVbXSxieXRlW10pYm9vbCIsIG1ldGhvZCAidmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX2x0KGJ5dGVbXSxieXRlW10pYm9vbCIsIG1ldGhvZCAidmVyaWZ5X2J5dGVfYnl0ZV9sdChieXRlW10sYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV91aW50bl91aW50bl9sZShieXRlW10sYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV9iaWd1aW50bl91aW50bl9sZShieXRlW10sYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV91aW50bl9iaWd1aW50bl9sZShieXRlW10sYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9sZShieXRlW10sYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV9ieXRlX2J5dGVfbGUoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfdWludG5fdWludG5fZ3QoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfYmlndWludG5fdWludG5fZ3QoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfdWludG5fYmlndWludG5fZ3QoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfYmlndWludG5fYmlndWludG5fZ3QoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfYnl0ZV9ieXRlX2d0KGJ5dGVbXSxieXRlW10pYm9vbCIsIG1ldGhvZCAidmVyaWZ5X3VpbnRuX3VpbnRuX2dlKGJ5dGVbXSxieXRlW10pYm9vbCIsIG1ldGhvZCAidmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2dlKGJ5dGVbXSxieXRlW10pYm9vbCIsIG1ldGhvZCAidmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX2dlKGJ5dGVbXSxieXRlW10pYm9vbCIsIG1ldGhvZCAidmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX2dlKGJ5dGVbXSxieXRlW10pYm9vbCIsIG1ldGhvZCAidmVyaWZ5X2J5dGVfYnl0ZV9nZShieXRlW10sYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV91aW50bl9pbml0KGJ5dGVbXSl1aW50MzIiLCBtZXRob2QgInZlcmlmeV9iaWd1aW50bl9pbml0KGJ5dGVbXSl1aW50MjU2IiwgbWV0aG9kICJ2ZXJpZnlfYnl0ZV9pbml0KGJ5dGVbXSlieXRlIiwgbWV0aG9kICJ2ZXJpZnlfdWludG5fZnJvbV9ieXRlcyhieXRlW10pdWludDMyIiwgbWV0aG9kICJ2ZXJpZnlfYmlndWludG5fZnJvbV9ieXRlcyhieXRlW10pdWludDI1NiIsIG1ldGhvZCAidmVyaWZ5X2J5dGVfZnJvbV9ieXRlcyhieXRlW10pYnl0ZSIsIG1ldGhvZCAidmVyaWZ5X3VpbnRuX2Zyb21fbG9nKGJ5dGVbXSl1aW50MzIiLCBtZXRob2QgInZlcmlmeV9iaWd1aW50bl9mcm9tX2xvZyhieXRlW10pdWludDI1NiIsIG1ldGhvZCAidmVyaWZ5X2J5dGVfZnJvbV9sb2coYnl0ZVtdKWJ5dGUiLCBtZXRob2QgInZlcmlmeV91Zml4ZWRueG1fYnl0ZXModWZpeGVkMzJ4OClieXRlW10iLCBtZXRob2QgInZlcmlmeV9iaWd1Zml4ZWRueG1fYnl0ZXModWZpeGVkMjU2eDE2KWJ5dGVbXSIsIG1ldGhvZCAidmVyaWZ5X3VmaXhlZG54bV9mcm9tX2J5dGVzKGJ5dGVbXSl1Zml4ZWQzMng4IiwgbWV0aG9kICJ2ZXJpZnlfYmlndWZpeGVkbnhtX2Zyb21fYnl0ZXMoYnl0ZVtdKXVmaXhlZDI1NngxNiIsIG1ldGhvZCAidmVyaWZ5X3VmaXhlZG54bV9mcm9tX2xvZyhieXRlW10pdWZpeGVkMzJ4OCIsIG1ldGhvZCAidmVyaWZ5X2JpZ3VmaXhlZG54bV9mcm9tX2xvZyhieXRlW10pdWZpeGVkMjU2eDE2IiwgbWV0aG9kICJ2ZXJpZnlfc3RyaW5nX2luaXQoc3RyaW5nKXN0cmluZyIsIG1ldGhvZCAidmVyaWZ5X3N0cmluZ19hZGQoc3RyaW5nLHN0cmluZylzdHJpbmciLCBtZXRob2QgInZlcmlmeV9zdHJpbmdfZXEoc3RyaW5nLHN0cmluZylib29sIiwgbWV0aG9kICJ2ZXJpZnlfc3RyaW5nX2J5dGVzKHN0cmluZylieXRlW10iLCBtZXRob2QgInZlcmlmeV9zdHJpbmdfZnJvbV9ieXRlcyhieXRlW10pc3RyaW5nIiwgbWV0aG9kICJ2ZXJpZnlfc3RyaW5nX2Zyb21fbG9nKGJ5dGVbXSlzdHJpbmciLCBtZXRob2QgInZlcmlmeV9ib29sX2J5dGVzKGJvb2wpYnl0ZVtdIiwgbWV0aG9kICJ2ZXJpZnlfYm9vbF9mcm9tX2J5dGVzKGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfYm9vbF9mcm9tX2xvZyhieXRlW10pYm9vbCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV91aW50bl91aW50bl9lcV9yb3V0ZUAyIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV9iaWd1aW50bl91aW50bl9lcV9yb3V0ZUAzIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV91aW50bl9iaWd1aW50bl9lcV9yb3V0ZUA0IF9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9lcV9yb3V0ZUA1IF9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV9ieXRlX2J5dGVfZXFfcm91dGVANiBfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfdWludG5fdWludG5fbmVfcm91dGVANyBfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfYmlndWludG5fdWludG5fbmVfcm91dGVAOCBfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfdWludG5fYmlndWludG5fbmVfcm91dGVAOSBfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfYmlndWludG5fYmlndWludG5fbmVfcm91dGVAMTAgX19wdXlhX2FyYzRfcm91dGVyX19fdmVyaWZ5X2J5dGVfYnl0ZV9uZV9yb3V0ZUAxMSBfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfdWludG5fdWludG5fbHRfcm91dGVAMTIgX19wdXlhX2FyYzRfcm91dGVyX19fdmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2x0X3JvdXRlQDEzIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV91aW50bl9iaWd1aW50bl9sdF9yb3V0ZUAxNCBfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfYmlndWludG5fYmlndWludG5fbHRfcm91dGVAMTUgX19wdXlhX2FyYzRfcm91dGVyX19fdmVyaWZ5X2J5dGVfYnl0ZV9sdF9yb3V0ZUAxNiBfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfdWludG5fdWludG5fbGVfcm91dGVAMTcgX19wdXlhX2FyYzRfcm91dGVyX19fdmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2xlX3JvdXRlQDE4IF9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV91aW50bl9iaWd1aW50bl9sZV9yb3V0ZUAxOSBfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfYmlndWludG5fYmlndWludG5fbGVfcm91dGVAMjAgX19wdXlhX2FyYzRfcm91dGVyX19fdmVyaWZ5X2J5dGVfYnl0ZV9sZV9yb3V0ZUAyMSBfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfdWludG5fdWludG5fZ3Rfcm91dGVAMjIgX19wdXlhX2FyYzRfcm91dGVyX19fdmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2d0X3JvdXRlQDIzIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV91aW50bl9iaWd1aW50bl9ndF9yb3V0ZUAyNCBfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfYmlndWludG5fYmlndWludG5fZ3Rfcm91dGVAMjUgX19wdXlhX2FyYzRfcm91dGVyX19fdmVyaWZ5X2J5dGVfYnl0ZV9ndF9yb3V0ZUAyNiBfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfdWludG5fdWludG5fZ2Vfcm91dGVAMjcgX19wdXlhX2FyYzRfcm91dGVyX19fdmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2dlX3JvdXRlQDI4IF9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV91aW50bl9iaWd1aW50bl9nZV9yb3V0ZUAyOSBfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfYmlndWludG5fYmlndWludG5fZ2Vfcm91dGVAMzAgX19wdXlhX2FyYzRfcm91dGVyX19fdmVyaWZ5X2J5dGVfYnl0ZV9nZV9yb3V0ZUAzMSBfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfdWludG5faW5pdF9yb3V0ZUAzMiBfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfYmlndWludG5faW5pdF9yb3V0ZUAzMyBfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfYnl0ZV9pbml0X3JvdXRlQDM0IF9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV91aW50bl9mcm9tX2J5dGVzX3JvdXRlQDM1IF9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV9iaWd1aW50bl9mcm9tX2J5dGVzX3JvdXRlQDM2IF9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV9ieXRlX2Zyb21fYnl0ZXNfcm91dGVAMzcgX19wdXlhX2FyYzRfcm91dGVyX19fdmVyaWZ5X3VpbnRuX2Zyb21fbG9nX3JvdXRlQDM4IF9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV9iaWd1aW50bl9mcm9tX2xvZ19yb3V0ZUAzOSBfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfYnl0ZV9mcm9tX2xvZ19yb3V0ZUA0MCBfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfdWZpeGVkbnhtX2J5dGVzX3JvdXRlQDQxIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV9iaWd1Zml4ZWRueG1fYnl0ZXNfcm91dGVANDIgX19wdXlhX2FyYzRfcm91dGVyX19fdmVyaWZ5X3VmaXhlZG54bV9mcm9tX2J5dGVzX3JvdXRlQDQzIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV9iaWd1Zml4ZWRueG1fZnJvbV9ieXRlc19yb3V0ZUA0NCBfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfdWZpeGVkbnhtX2Zyb21fbG9nX3JvdXRlQDQ1IF9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV9iaWd1Zml4ZWRueG1fZnJvbV9sb2dfcm91dGVANDYgX19wdXlhX2FyYzRfcm91dGVyX19fdmVyaWZ5X3N0cmluZ19pbml0X3JvdXRlQDQ3IF9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV9zdHJpbmdfYWRkX3JvdXRlQDQ4IF9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV9zdHJpbmdfZXFfcm91dGVANDkgX19wdXlhX2FyYzRfcm91dGVyX19fdmVyaWZ5X3N0cmluZ19ieXRlc19yb3V0ZUA1MCBfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfc3RyaW5nX2Zyb21fYnl0ZXNfcm91dGVANTEgX19wdXlhX2FyYzRfcm91dGVyX19fdmVyaWZ5X3N0cmluZ19mcm9tX2xvZ19yb3V0ZUA1MiBfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfYm9vbF9ieXRlc19yb3V0ZUA1MyBfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfYm9vbF9mcm9tX2J5dGVzX3JvdXRlQDU0IF9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV9ib29sX2Zyb21fbG9nX3JvdXRlQDU1CiAgICBpbnRjXzMgLy8gMAogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfdWludG5fdWludG5fZXFfcm91dGVAMjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV91aW50bl91aW50bl9lcQogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzMgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV9iaWd1aW50bl91aW50bl9lcV9yb3V0ZUAzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYmlndWludG5fdWludG5fZXEKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfdWludG5fYmlndWludG5fZXFfcm91dGVANDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX2VxCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMyAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fdmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX2VxX3JvdXRlQDU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9lcQogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzMgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV9ieXRlX2J5dGVfZXFfcm91dGVANjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozNwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozNwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2J5dGVfYnl0ZV9lcQogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzMgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV91aW50bl91aW50bl9uZV9yb3V0ZUA3OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQ1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQ1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfdWludG5fdWludG5fbmUKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfYmlndWludG5fdWludG5fbmVfcm91dGVAODoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo1MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo1MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX25lCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMyAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fdmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX25lX3JvdXRlQDk6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV91aW50bl9iaWd1aW50bl9uZQogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzMgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9uZV9yb3V0ZUAxMDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo2OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo2OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX25lCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMyAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fdmVyaWZ5X2J5dGVfYnl0ZV9uZV9yb3V0ZUAxMToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo3NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo3NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2J5dGVfYnl0ZV9uZQogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzMgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV91aW50bl91aW50bl9sdF9yb3V0ZUAxMjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo4NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo4NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3VpbnRuX3VpbnRuX2x0CiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMyAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fdmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2x0X3JvdXRlQDEzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjkzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjkzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYmlndWludG5fdWludG5fbHQKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfdWludG5fYmlndWludG5fbHRfcm91dGVAMTQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTAxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEwMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX2x0CiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMyAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fdmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX2x0X3JvdXRlQDE1OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEwOQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMDkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9sdAogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzMgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV9ieXRlX2J5dGVfbHRfcm91dGVAMTY6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTE3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjExNwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2J5dGVfYnl0ZV9sdAogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzMgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV91aW50bl91aW50bl9sZV9yb3V0ZUAxNzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMjUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTI1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfdWludG5fdWludG5fbGUKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfYmlndWludG5fdWludG5fbGVfcm91dGVAMTg6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTMzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEzMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2xlCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMyAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fdmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX2xlX3JvdXRlQDE5OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE0MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxNDEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV91aW50bl9iaWd1aW50bl9sZQogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzMgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9sZV9yb3V0ZUAyMDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxNDkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTQ5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYmlndWludG5fYmlndWludG5fbGUKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfYnl0ZV9ieXRlX2xlX3JvdXRlQDIxOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE1NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxNTcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9ieXRlX2J5dGVfbGUKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfdWludG5fdWludG5fZ3Rfcm91dGVAMjI6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTY1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE2NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3VpbnRuX3VpbnRuX2d0CiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMyAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fdmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2d0X3JvdXRlQDIzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE3MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxNzMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9iaWd1aW50bl91aW50bl9ndAogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzMgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV91aW50bl9iaWd1aW50bl9ndF9yb3V0ZUAyNDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxODEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTgxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfdWludG5fYmlndWludG5fZ3QKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfYmlndWludG5fYmlndWludG5fZ3Rfcm91dGVAMjU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTg5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE4OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX2d0CiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMyAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fdmVyaWZ5X2J5dGVfYnl0ZV9ndF9yb3V0ZUAyNjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxOTcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTk3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYnl0ZV9ieXRlX2d0CiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMyAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fdmVyaWZ5X3VpbnRuX3VpbnRuX2dlX3JvdXRlQDI3OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIwNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMDUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV91aW50bl91aW50bl9nZQogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzMgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV9iaWd1aW50bl91aW50bl9nZV9yb3V0ZUAyODoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMTMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjEzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYmlndWludG5fdWludG5fZ2UKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfdWludG5fYmlndWludG5fZ2Vfcm91dGVAMjk6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjIxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIyMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX2dlCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMyAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fdmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX2dlX3JvdXRlQDMwOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIyOQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMjkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9nZQogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzMgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV9ieXRlX2J5dGVfZ2Vfcm91dGVAMzE6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjM3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIzNwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2J5dGVfYnl0ZV9nZQogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzMgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV91aW50bl9pbml0X3JvdXRlQDMyOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI0NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI0NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3VpbnRuX2luaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV9iaWd1aW50bl9pbml0X3JvdXRlQDMzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI1MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI1MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2JpZ3VpbnRuX2luaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV9ieXRlX2luaXRfcm91dGVAMzQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjU1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjU1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYnl0ZV9pbml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfdWludG5fZnJvbV9ieXRlc19yb3V0ZUAzNToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNjAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNjAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV91aW50bl9mcm9tX2J5dGVzCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfYmlndWludG5fZnJvbV9ieXRlc19yb3V0ZUAzNjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNjQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNjQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9iaWd1aW50bl9mcm9tX2J5dGVzCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfYnl0ZV9mcm9tX2J5dGVzX3JvdXRlQDM3OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI2OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI2OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2J5dGVfZnJvbV9ieXRlcwogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fdmVyaWZ5X3VpbnRuX2Zyb21fbG9nX3JvdXRlQDM4OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI3MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI3MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3VpbnRuX2Zyb21fbG9nCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfYmlndWludG5fZnJvbV9sb2dfcm91dGVAMzk6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Mjc2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Mjc2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYmlndWludG5fZnJvbV9sb2cKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV9ieXRlX2Zyb21fbG9nX3JvdXRlQDQwOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI4MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI4MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2J5dGVfZnJvbV9sb2cKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV91Zml4ZWRueG1fYnl0ZXNfcm91dGVANDE6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Mjg0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyODQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV91Zml4ZWRueG1fYnl0ZXMKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfYmlndWZpeGVkbnhtX2J5dGVzX3JvdXRlQDQyOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI4OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Mjg4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYmlndWZpeGVkbnhtX2J5dGVzCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fdmVyaWZ5X3VmaXhlZG54bV9mcm9tX2J5dGVzX3JvdXRlQDQzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI5MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI5MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3VmaXhlZG54bV9mcm9tX2J5dGVzCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfYmlndWZpeGVkbnhtX2Zyb21fYnl0ZXNfcm91dGVANDQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Mjk2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Mjk2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYmlndWZpeGVkbnhtX2Zyb21fYnl0ZXMKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV91Zml4ZWRueG1fZnJvbV9sb2dfcm91dGVANDU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzAwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzAwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfdWZpeGVkbnhtX2Zyb21fbG9nCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfYmlndWZpeGVkbnhtX2Zyb21fbG9nX3JvdXRlQDQ2OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMwNAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMwNAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2JpZ3VmaXhlZG54bV9mcm9tX2xvZwogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fdmVyaWZ5X3N0cmluZ19pbml0X3JvdXRlQDQ3OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMwOAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMwOAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3N0cmluZ19pbml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfc3RyaW5nX2FkZF9yb3V0ZUA0ODoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMTMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMxMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3N0cmluZ19hZGQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV9zdHJpbmdfZXFfcm91dGVANDk6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzE4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMTgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9zdHJpbmdfZXEKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfc3RyaW5nX2J5dGVzX3JvdXRlQDUwOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMyMgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMyMgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3N0cmluZ19ieXRlcwogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV9zdHJpbmdfZnJvbV9ieXRlc19yb3V0ZUA1MToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMjcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMjcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9zdHJpbmdfZnJvbV9ieXRlcwogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fdmVyaWZ5X3N0cmluZ19mcm9tX2xvZ19yb3V0ZUA1MjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMzEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMzEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9zdHJpbmdfZnJvbV9sb2cKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV9ib29sX2J5dGVzX3JvdXRlQDUzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMzNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzM1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYm9vbF9ieXRlcwogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV9ib29sX2Zyb21fYnl0ZXNfcm91dGVANTQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzM5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzM5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYm9vbF9mcm9tX2J5dGVzCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfYm9vbF9mcm9tX2xvZ19yb3V0ZUA1NToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozNDMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozNDMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9ib29sX2Zyb21fbG9nCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19iYXJlX3JvdXRpbmdANTg6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGJueiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19hZnRlcl9pZl9lbHNlQDYyCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgaW50Y18wIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fYWZ0ZXJfaWZfZWxzZUA2MjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18zIC8vIDAKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV91aW50bl91aW50bl9lcShhOiBieXRlcywgYjogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X3VpbnRuX3VpbnRuX2VxOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjUtNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfdWludG5fdWludG5fZXEoYTogYnl0ZXMsIGI6IGJ5dGVzKTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo5CiAgICAvLyBjb25zdCBhVWludE4gPSBuZXcgVWludE48NjQ+KGFCaWd1aW50KQogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIGludGNfMSAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzEgLy8gOAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgZGlnIDEKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTAKICAgIC8vIGNvbnN0IGJVaW50TiA9IG5ldyBVaW50Tjw2ND4oYkJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGZyYW1lX2RpZyAtMQogICAgdW5jb3ZlciAyCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjExCiAgICAvLyByZXR1cm4gYVVpbnROID09PSBiVWludE4KICAgID09CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludG5fdWludG5fZXEoYTogYnl0ZXMsIGI6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV9iaWd1aW50bl91aW50bl9lcToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMy0xNAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYmlndWludG5fdWludG5fZXEoYTogYnl0ZXMsIGI6IGJ5dGVzKTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxNwogICAgLy8gY29uc3QgYVVpbnROID0gbmV3IFVpbnROPDUxMj4oYUJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaW50Y18yIC8vIDY0CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzIgLy8gNjQKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTIKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTgKICAgIC8vIGNvbnN0IGJVaW50TiA9IG5ldyBVaW50Tjw2ND4oYkJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMSAvLyA4CiAgICBiemVybwogICAgZnJhbWVfZGlnIC0xCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE5CiAgICAvLyByZXR1cm4gYVVpbnROLmJ5dGVzLmVxdWFscyhiVWludE4uYnl0ZXMpCiAgICA9PQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX2VxKGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfdWludG5fYmlndWludG5fZXE6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjEtMjIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX2VxKGE6IGJ5dGVzLCBiOiBieXRlcyk6IGJvb2xlYW4gewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjUKICAgIC8vIGNvbnN0IGFVaW50TiA9IG5ldyBVaW50Tjw2ND4oYUJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMSAvLyA4CiAgICBiemVybwogICAgZnJhbWVfZGlnIC0yCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI2CiAgICAvLyBjb25zdCBiVWludE4gPSBuZXcgVWludE48NTEyPihiQmlndWludCkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpbnRjXzIgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMiAvLyA2NAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMQogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNwogICAgLy8gcmV0dXJuIGFVaW50Ti5ieXRlcy5lcXVhbHMoYlVpbnROLmJ5dGVzKQogICAgPT0KICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9lcShhOiBieXRlcywgYjogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX2VxOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI5LTMwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9lcShhOiBieXRlcywgYjogYnl0ZXMpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMzCiAgICAvLyBjb25zdCBhVWludE4gPSBuZXcgVWludE48NTEyPihhQmlndWludCkKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpbnRjXzIgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMiAvLyA2NAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgZGlnIDEKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzQKICAgIC8vIGNvbnN0IGJVaW50TiA9IG5ldyBVaW50Tjw1MTI+KGJCaWd1aW50KQogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGludGNfMiAvLyA2NAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgZnJhbWVfZGlnIC0xCiAgICB1bmNvdmVyIDIKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzUKICAgIC8vIHJldHVybiBhVWludE4gPT09IGJVaW50TgogICAgPT0KICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9ieXRlX2J5dGVfZXEoYTogYnl0ZXMsIGI6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV9ieXRlX2J5dGVfZXE6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzctMzgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2J5dGVfYnl0ZV9lcShhOiBieXRlcywgYjogYnl0ZXMpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQxCiAgICAvLyBjb25zdCBhQnl0ZSA9IG5ldyBCeXRlKGFCaWd1aW50KQogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIGludGNfMCAvLyAxCiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzAgLy8gMQogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgZGlnIDEKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDIKICAgIC8vIGNvbnN0IGJCeXRlID0gbmV3IEJ5dGUoYkJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGZyYW1lX2RpZyAtMQogICAgdW5jb3ZlciAyCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQzCiAgICAvLyByZXR1cm4gYUJ5dGUgPT09IGJCeXRlCiAgICA9PQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3VpbnRuX3VpbnRuX25lKGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfdWludG5fdWludG5fbmU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDUtNDYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X3VpbnRuX3VpbnRuX25lKGE6IGJ5dGVzLCBiOiBieXRlcyk6IGJvb2xlYW4gewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDkKICAgIC8vIGNvbnN0IGFVaW50TiA9IG5ldyBVaW50Tjw2ND4oYUJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMSAvLyA4CiAgICBiemVybwogICAgZnJhbWVfZGlnIC0yCiAgICBkaWcgMQogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo1MAogICAgLy8gY29uc3QgYlVpbnROID0gbmV3IFVpbnROPDY0PihiQmlndWludCkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgZnJhbWVfZGlnIC0xCiAgICB1bmNvdmVyIDIKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NTEKICAgIC8vIHJldHVybiBhVWludE4gIT09IGJVaW50TgogICAgIT0KICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9iaWd1aW50bl91aW50bl9uZShhOiBieXRlcywgYjogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX25lOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjUzLTU0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9iaWd1aW50bl91aW50bl9uZShhOiBieXRlcywgYjogYnl0ZXMpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjU3CiAgICAvLyBjb25zdCBhVWludE4gPSBuZXcgVWludE48NTEyPihhQmlndWludCkKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpbnRjXzIgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMiAvLyA2NAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo1OAogICAgLy8gY29uc3QgYlVpbnROID0gbmV3IFVpbnROPDY0PihiQmlndWludCkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18xIC8vIDgKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTEKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NTkKICAgIC8vIHJldHVybiAhYVVpbnROLmJ5dGVzLmVxdWFscyhiVWludE4uYnl0ZXMpCiAgICA9PQogICAgIQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX25lKGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfdWludG5fYmlndWludG5fbmU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjEtNjIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX25lKGE6IGJ5dGVzLCBiOiBieXRlcyk6IGJvb2xlYW4gewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjUKICAgIC8vIGNvbnN0IGFVaW50TiA9IG5ldyBVaW50Tjw2ND4oYUJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMSAvLyA4CiAgICBiemVybwogICAgZnJhbWVfZGlnIC0yCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjY2CiAgICAvLyBjb25zdCBiVWludE4gPSBuZXcgVWludE48NTEyPihiQmlndWludCkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpbnRjXzIgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMiAvLyA2NAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMQogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo2NwogICAgLy8gcmV0dXJuICFhVWludE4uYnl0ZXMuZXF1YWxzKGJVaW50Ti5ieXRlcykKICAgID09CiAgICAhCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludG5fYmlndWludG5fbmUoYTogYnl0ZXMsIGI6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9uZToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo2OS03MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYmlndWludG5fYmlndWludG5fbmUoYTogYnl0ZXMsIGI6IGJ5dGVzKTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo3MwogICAgLy8gY29uc3QgYVVpbnROID0gbmV3IFVpbnROPDUxMj4oYUJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaW50Y18yIC8vIDY0CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzIgLy8gNjQKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTIKICAgIGRpZyAxCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc0CiAgICAvLyBjb25zdCBiVWludE4gPSBuZXcgVWludE48NTEyPihiQmlndWludCkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpbnRjXzIgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGZyYW1lX2RpZyAtMQogICAgdW5jb3ZlciAyCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc1CiAgICAvLyByZXR1cm4gYVVpbnROICE9PSBiVWludE4KICAgICE9CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYnl0ZV9ieXRlX25lKGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfYnl0ZV9ieXRlX25lOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc3LTc4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9ieXRlX2J5dGVfbmUoYTogYnl0ZXMsIGI6IGJ5dGVzKTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo4MQogICAgLy8gY29uc3QgYUJ5dGUgPSBuZXcgQnl0ZShhQmlndWludCkKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18wIC8vIDEKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTIKICAgIGRpZyAxCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjgyCiAgICAvLyBjb25zdCBiQnl0ZSA9IG5ldyBCeXRlKGJCaWd1aW50KQogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGludGNfMCAvLyAxCiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBmcmFtZV9kaWcgLTEKICAgIHVuY292ZXIgMgogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo4MwogICAgLy8gcmV0dXJuIGFCeXRlICE9PSBiQnl0ZQogICAgIT0KICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV91aW50bl91aW50bl9sdChhOiBieXRlcywgYjogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X3VpbnRuX3VpbnRuX2x0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjg1LTg2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV91aW50bl91aW50bl9sdChhOiBieXRlcywgYjogYnl0ZXMpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjg5CiAgICAvLyBjb25zdCBhVWludE4gPSBuZXcgVWludE48NjQ+KGFCaWd1aW50KQogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIGludGNfMSAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzEgLy8gOAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgZGlnIDEKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OTAKICAgIC8vIGNvbnN0IGJVaW50TiA9IG5ldyBVaW50Tjw2ND4oYkJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGZyYW1lX2RpZyAtMQogICAgdW5jb3ZlciAyCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjkxCiAgICAvLyByZXR1cm4gYVVpbnROLm5hdGl2ZSA8IGJVaW50Ti5uYXRpdmUKICAgIHN3YXAKICAgIGJ0b2kKICAgIHN3YXAKICAgIGJ0b2kKICAgIDwKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9iaWd1aW50bl91aW50bl9sdChhOiBieXRlcywgYjogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2x0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjkzLTk0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9iaWd1aW50bl91aW50bl9sdChhOiBieXRlcywgYjogYnl0ZXMpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjk3CiAgICAvLyBjb25zdCBhVWludE4gPSBuZXcgVWludE48NTEyPihhQmlndWludCkKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpbnRjXzIgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMiAvLyA2NAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo5OAogICAgLy8gY29uc3QgYlVpbnROID0gbmV3IFVpbnROPDY0PihiQmlndWludCkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18xIC8vIDgKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTEKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OTkKICAgIC8vIHJldHVybiBhVWludE4ubmF0aXZlIDwgQmlnVWludChiVWludE4ubmF0aXZlKQogICAgYnRvaQogICAgaXRvYgogICAgYjwKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV91aW50bl9iaWd1aW50bl9sdChhOiBieXRlcywgYjogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX2x0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEwMS0xMDIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX2x0KGE6IGJ5dGVzLCBiOiBieXRlcyk6IGJvb2xlYW4gewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTA1CiAgICAvLyBjb25zdCBhVWludE4gPSBuZXcgVWludE48NjQ+KGFCaWd1aW50KQogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIGludGNfMSAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzEgLy8gOAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMDYKICAgIC8vIGNvbnN0IGJVaW50TiA9IG5ldyBVaW50Tjw1MTI+KGJCaWd1aW50KQogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGludGNfMiAvLyA2NAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18yIC8vIDY0CiAgICBiemVybwogICAgZnJhbWVfZGlnIC0xCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEwNwogICAgLy8gcmV0dXJuIEJpZ1VpbnQoYVVpbnROLm5hdGl2ZSkgPCBiVWludE4ubmF0aXZlCiAgICBzd2FwCiAgICBidG9pCiAgICBpdG9iCiAgICBiPgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX2x0KGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfYmlndWludG5fYmlndWludG5fbHQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTA5LTExMAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYmlndWludG5fYmlndWludG5fbHQoYTogYnl0ZXMsIGI6IGJ5dGVzKTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMTMKICAgIC8vIGNvbnN0IGFVaW50TiA9IG5ldyBVaW50Tjw1MTI+KGFCaWd1aW50KQogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIGludGNfMiAvLyA2NAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18yIC8vIDY0CiAgICBiemVybwogICAgZnJhbWVfZGlnIC0yCiAgICBkaWcgMQogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMTQKICAgIC8vIGNvbnN0IGJVaW50TiA9IG5ldyBVaW50Tjw1MTI+KGJCaWd1aW50KQogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGludGNfMiAvLyA2NAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgZnJhbWVfZGlnIC0xCiAgICB1bmNvdmVyIDIKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTE1CiAgICAvLyByZXR1cm4gYVVpbnROLm5hdGl2ZSA8IGJVaW50Ti5uYXRpdmUKICAgIGI8CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYnl0ZV9ieXRlX2x0KGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfYnl0ZV9ieXRlX2x0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjExNy0xMTgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2J5dGVfYnl0ZV9sdChhOiBieXRlcywgYjogYnl0ZXMpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEyMQogICAgLy8gY29uc3QgYUJ5dGUgPSBuZXcgQnl0ZShhQmlndWludCkKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18wIC8vIDEKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTIKICAgIGRpZyAxCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEyMgogICAgLy8gY29uc3QgYkJ5dGUgPSBuZXcgQnl0ZShiQmlndWludCkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgZnJhbWVfZGlnIC0xCiAgICB1bmNvdmVyIDIKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTIzCiAgICAvLyByZXR1cm4gYUJ5dGUubmF0aXZlIDwgYkJ5dGUubmF0aXZlCiAgICBzd2FwCiAgICBidG9pCiAgICBzd2FwCiAgICBidG9pCiAgICA8CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfdWludG5fdWludG5fbGUoYTogYnl0ZXMsIGI6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV91aW50bl91aW50bl9sZToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMjUtMTI2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV91aW50bl91aW50bl9sZShhOiBieXRlcywgYjogYnl0ZXMpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEyOQogICAgLy8gY29uc3QgYVVpbnROID0gbmV3IFVpbnROPDY0PihhQmlndWludCkKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18xIC8vIDgKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTIKICAgIGRpZyAxCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEzMAogICAgLy8gY29uc3QgYlVpbnROID0gbmV3IFVpbnROPDY0PihiQmlndWludCkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgZnJhbWVfZGlnIC0xCiAgICB1bmNvdmVyIDIKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTMxCiAgICAvLyByZXR1cm4gYVVpbnROLm5hdGl2ZSA8PSBiVWludE4ubmF0aXZlCiAgICBzd2FwCiAgICBidG9pCiAgICBzd2FwCiAgICBidG9pCiAgICA8PQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2xlKGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfYmlndWludG5fdWludG5fbGU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTMzLTEzNAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYmlndWludG5fdWludG5fbGUoYTogYnl0ZXMsIGI6IGJ5dGVzKTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMzcKICAgIC8vIGNvbnN0IGFVaW50TiA9IG5ldyBVaW50Tjw1MTI+KGFCaWd1aW50KQogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIGludGNfMiAvLyA2NAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18yIC8vIDY0CiAgICBiemVybwogICAgZnJhbWVfZGlnIC0yCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEzOAogICAgLy8gY29uc3QgYlVpbnROID0gbmV3IFVpbnROPDY0PihiQmlndWludCkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18xIC8vIDgKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTEKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTM5CiAgICAvLyByZXR1cm4gYVVpbnROLm5hdGl2ZSA8PSBCaWdVaW50KGJVaW50Ti5uYXRpdmUpCiAgICBidG9pCiAgICBpdG9iCiAgICBiPD0KICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV91aW50bl9iaWd1aW50bl9sZShhOiBieXRlcywgYjogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX2xlOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE0MS0xNDIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX2xlKGE6IGJ5dGVzLCBiOiBieXRlcyk6IGJvb2xlYW4gewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTQ1CiAgICAvLyBjb25zdCBhVWludE4gPSBuZXcgVWludE48NjQ+KGFCaWd1aW50KQogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIGludGNfMSAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzEgLy8gOAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxNDYKICAgIC8vIGNvbnN0IGJVaW50TiA9IG5ldyBVaW50Tjw1MTI+KGJCaWd1aW50KQogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGludGNfMiAvLyA2NAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18yIC8vIDY0CiAgICBiemVybwogICAgZnJhbWVfZGlnIC0xCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE0NwogICAgLy8gcmV0dXJuIEJpZ1VpbnQoYVVpbnROLm5hdGl2ZSkgPD0gYlVpbnROLm5hdGl2ZQogICAgc3dhcAogICAgYnRvaQogICAgaXRvYgogICAgYj49CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludG5fYmlndWludG5fbGUoYTogYnl0ZXMsIGI6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9sZToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxNDktMTUwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9sZShhOiBieXRlcywgYjogYnl0ZXMpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE1MwogICAgLy8gY29uc3QgYVVpbnROID0gbmV3IFVpbnROPDUxMj4oYUJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaW50Y18yIC8vIDY0CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzIgLy8gNjQKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTIKICAgIGRpZyAxCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE1NAogICAgLy8gY29uc3QgYlVpbnROID0gbmV3IFVpbnROPDUxMj4oYkJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgaW50Y18yIC8vIDY0CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBmcmFtZV9kaWcgLTEKICAgIHVuY292ZXIgMgogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxNTUKICAgIC8vIHJldHVybiBhVWludE4ubmF0aXZlIDw9IGJVaW50Ti5uYXRpdmUKICAgIGI8PQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2J5dGVfYnl0ZV9sZShhOiBieXRlcywgYjogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X2J5dGVfYnl0ZV9sZToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxNTctMTU4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9ieXRlX2J5dGVfbGUoYTogYnl0ZXMsIGI6IGJ5dGVzKTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxNjEKICAgIC8vIGNvbnN0IGFCeXRlID0gbmV3IEJ5dGUoYUJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMCAvLyAxCiAgICBiemVybwogICAgZnJhbWVfZGlnIC0yCiAgICBkaWcgMQogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxNjIKICAgIC8vIGNvbnN0IGJCeXRlID0gbmV3IEJ5dGUoYkJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGZyYW1lX2RpZyAtMQogICAgdW5jb3ZlciAyCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE2MwogICAgLy8gcmV0dXJuIGFCeXRlLm5hdGl2ZSA8PSBiQnl0ZS5uYXRpdmUKICAgIHN3YXAKICAgIGJ0b2kKICAgIHN3YXAKICAgIGJ0b2kKICAgIDw9CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfdWludG5fdWludG5fZ3QoYTogYnl0ZXMsIGI6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV91aW50bl91aW50bl9ndDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxNjUtMTY2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV91aW50bl91aW50bl9ndChhOiBieXRlcywgYjogYnl0ZXMpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE2OQogICAgLy8gY29uc3QgYVVpbnROID0gbmV3IFVpbnROPDY0PihhQmlndWludCkKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18xIC8vIDgKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTIKICAgIGRpZyAxCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE3MAogICAgLy8gY29uc3QgYlVpbnROID0gbmV3IFVpbnROPDY0PihiQmlndWludCkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgZnJhbWVfZGlnIC0xCiAgICB1bmNvdmVyIDIKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTcxCiAgICAvLyByZXR1cm4gYVVpbnROLm5hdGl2ZSA+IGJVaW50Ti5uYXRpdmUKICAgIHN3YXAKICAgIGJ0b2kKICAgIHN3YXAKICAgIGJ0b2kKICAgID4KICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9iaWd1aW50bl91aW50bl9ndChhOiBieXRlcywgYjogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2d0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE3My0xNzQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2d0KGE6IGJ5dGVzLCBiOiBieXRlcyk6IGJvb2xlYW4gewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTc3CiAgICAvLyBjb25zdCBhVWludE4gPSBuZXcgVWludE48NTEyPihhQmlndWludCkKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpbnRjXzIgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMiAvLyA2NAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxNzgKICAgIC8vIGNvbnN0IGJVaW50TiA9IG5ldyBVaW50Tjw2ND4oYkJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMSAvLyA4CiAgICBiemVybwogICAgZnJhbWVfZGlnIC0xCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE3OQogICAgLy8gcmV0dXJuIGFVaW50Ti5uYXRpdmUgPiBCaWdVaW50KGJVaW50Ti5uYXRpdmUpCiAgICBidG9pCiAgICBpdG9iCiAgICBiPgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX2d0KGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfdWludG5fYmlndWludG5fZ3Q6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTgxLTE4MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfdWludG5fYmlndWludG5fZ3QoYTogYnl0ZXMsIGI6IGJ5dGVzKTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxODUKICAgIC8vIGNvbnN0IGFVaW50TiA9IG5ldyBVaW50Tjw2ND4oYUJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMSAvLyA4CiAgICBiemVybwogICAgZnJhbWVfZGlnIC0yCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE4NgogICAgLy8gY29uc3QgYlVpbnROID0gbmV3IFVpbnROPDUxMj4oYkJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgaW50Y18yIC8vIDY0CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzIgLy8gNjQKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTEKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTg3CiAgICAvLyByZXR1cm4gQmlnVWludChhVWludE4ubmF0aXZlKSA+IGJVaW50Ti5uYXRpdmUKICAgIHN3YXAKICAgIGJ0b2kKICAgIGl0b2IKICAgIGI8CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludG5fYmlndWludG5fZ3QoYTogYnl0ZXMsIGI6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9ndDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxODktMTkwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9ndChhOiBieXRlcywgYjogYnl0ZXMpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE5MwogICAgLy8gY29uc3QgYVVpbnROID0gbmV3IFVpbnROPDUxMj4oYUJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaW50Y18yIC8vIDY0CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzIgLy8gNjQKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTIKICAgIGRpZyAxCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE5NAogICAgLy8gY29uc3QgYlVpbnROID0gbmV3IFVpbnROPDUxMj4oYkJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgaW50Y18yIC8vIDY0CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBmcmFtZV9kaWcgLTEKICAgIHVuY292ZXIgMgogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxOTUKICAgIC8vIHJldHVybiBhVWludE4ubmF0aXZlID4gYlVpbnROLm5hdGl2ZQogICAgYj4KICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9ieXRlX2J5dGVfZ3QoYTogYnl0ZXMsIGI6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV9ieXRlX2J5dGVfZ3Q6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTk3LTE5OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYnl0ZV9ieXRlX2d0KGE6IGJ5dGVzLCBiOiBieXRlcyk6IGJvb2xlYW4gewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjAxCiAgICAvLyBjb25zdCBhQnl0ZSA9IG5ldyBCeXRlKGFCaWd1aW50KQogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIGludGNfMCAvLyAxCiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzAgLy8gMQogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgZGlnIDEKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjAyCiAgICAvLyBjb25zdCBiQnl0ZSA9IG5ldyBCeXRlKGJCaWd1aW50KQogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGludGNfMCAvLyAxCiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBmcmFtZV9kaWcgLTEKICAgIHVuY292ZXIgMgogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMDMKICAgIC8vIHJldHVybiBhQnl0ZS5uYXRpdmUgPiBiQnl0ZS5uYXRpdmUKICAgIHN3YXAKICAgIGJ0b2kKICAgIHN3YXAKICAgIGJ0b2kKICAgID4KICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV91aW50bl91aW50bl9nZShhOiBieXRlcywgYjogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X3VpbnRuX3VpbnRuX2dlOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIwNS0yMDYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X3VpbnRuX3VpbnRuX2dlKGE6IGJ5dGVzLCBiOiBieXRlcyk6IGJvb2xlYW4gewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjA5CiAgICAvLyBjb25zdCBhVWludE4gPSBuZXcgVWludE48NjQ+KGFCaWd1aW50KQogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIGludGNfMSAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzEgLy8gOAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgZGlnIDEKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjEwCiAgICAvLyBjb25zdCBiVWludE4gPSBuZXcgVWludE48NjQ+KGJCaWd1aW50KQogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGludGNfMSAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBmcmFtZV9kaWcgLTEKICAgIHVuY292ZXIgMgogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMTEKICAgIC8vIHJldHVybiBhVWludE4ubmF0aXZlID49IGJVaW50Ti5uYXRpdmUKICAgIHN3YXAKICAgIGJ0b2kKICAgIHN3YXAKICAgIGJ0b2kKICAgID49CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludG5fdWludG5fZ2UoYTogYnl0ZXMsIGI6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV9iaWd1aW50bl91aW50bl9nZToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMTMtMjE0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9iaWd1aW50bl91aW50bl9nZShhOiBieXRlcywgYjogYnl0ZXMpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIxNwogICAgLy8gY29uc3QgYVVpbnROID0gbmV3IFVpbnROPDUxMj4oYUJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaW50Y18yIC8vIDY0CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzIgLy8gNjQKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTIKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjE4CiAgICAvLyBjb25zdCBiVWludE4gPSBuZXcgVWludE48NjQ+KGJCaWd1aW50KQogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGludGNfMSAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzEgLy8gOAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMQogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMTkKICAgIC8vIHJldHVybiBhVWludE4ubmF0aXZlID49IEJpZ1VpbnQoYlVpbnROLm5hdGl2ZSkKICAgIGJ0b2kKICAgIGl0b2IKICAgIGI+PQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX2dlKGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfdWludG5fYmlndWludG5fZ2U6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjIxLTIyMgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfdWludG5fYmlndWludG5fZ2UoYTogYnl0ZXMsIGI6IGJ5dGVzKTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMjUKICAgIC8vIGNvbnN0IGFVaW50TiA9IG5ldyBVaW50Tjw2ND4oYUJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMSAvLyA4CiAgICBiemVybwogICAgZnJhbWVfZGlnIC0yCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIyNgogICAgLy8gY29uc3QgYlVpbnROID0gbmV3IFVpbnROPDUxMj4oYkJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgaW50Y18yIC8vIDY0CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzIgLy8gNjQKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTEKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjI3CiAgICAvLyByZXR1cm4gQmlnVWludChhVWludE4ubmF0aXZlKSA+PSBiVWludE4ubmF0aXZlCiAgICBzd2FwCiAgICBidG9pCiAgICBpdG9iCiAgICBiPD0KICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9nZShhOiBieXRlcywgYjogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX2dlOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIyOS0yMzAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX2dlKGE6IGJ5dGVzLCBiOiBieXRlcyk6IGJvb2xlYW4gewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjMzCiAgICAvLyBjb25zdCBhVWludE4gPSBuZXcgVWludE48NTEyPihhQmlndWludCkKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpbnRjXzIgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMiAvLyA2NAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgZGlnIDEKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjM0CiAgICAvLyBjb25zdCBiVWludE4gPSBuZXcgVWludE48NTEyPihiQmlndWludCkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpbnRjXzIgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGZyYW1lX2RpZyAtMQogICAgdW5jb3ZlciAyCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIzNQogICAgLy8gcmV0dXJuIGFVaW50Ti5uYXRpdmUgPj0gYlVpbnROLm5hdGl2ZQogICAgYj49CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYnl0ZV9ieXRlX2dlKGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfYnl0ZV9ieXRlX2dlOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIzNy0yMzgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2J5dGVfYnl0ZV9nZShhOiBieXRlcywgYjogYnl0ZXMpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI0MQogICAgLy8gY29uc3QgYUJ5dGUgPSBuZXcgQnl0ZShhQmlndWludCkKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18wIC8vIDEKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTIKICAgIGRpZyAxCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI0MgogICAgLy8gY29uc3QgYkJ5dGUgPSBuZXcgQnl0ZShiQmlndWludCkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgZnJhbWVfZGlnIC0xCiAgICB1bmNvdmVyIDIKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjQzCiAgICAvLyByZXR1cm4gYUJ5dGUubmF0aXZlID49IGJCeXRlLm5hdGl2ZQogICAgc3dhcAogICAgYnRvaQogICAgc3dhcAogICAgYnRvaQogICAgPj0KICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV91aW50bl9pbml0KGE6IGJ5dGVzKSAtPiBieXRlczoKdmVyaWZ5X3VpbnRuX2luaXQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjQ1LTI0NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfdWludG5faW5pdChhOiBieXRlcyk6IFVpbnROPDMyPiB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNDgKICAgIC8vIHJldHVybiBuZXcgVWludE48MzI+KGFCaWd1aW50KQogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIHB1c2hpbnQgNCAvLyA0CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBwdXNoaW50IDQgLy8gNAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMQogICAgYnwKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9iaWd1aW50bl9pbml0KGE6IGJ5dGVzKSAtPiBieXRlczoKdmVyaWZ5X2JpZ3VpbnRuX2luaXQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjUwLTI1MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYmlndWludG5faW5pdChhOiBieXRlcyk6IFVpbnROPDI1Nj4gewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjUzCiAgICAvLyByZXR1cm4gbmV3IFVpbnROPDI1Nj4oYUJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgcHVzaGludCAzMiAvLyAzMgogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgcHVzaGludCAzMiAvLyAzMgogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMQogICAgYnwKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9ieXRlX2luaXQoYTogYnl0ZXMpIC0+IGJ5dGVzOgp2ZXJpZnlfYnl0ZV9pbml0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI1NS0yNTYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2J5dGVfaW5pdChhOiBieXRlcyk6IEJ5dGUgewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjU4CiAgICAvLyByZXR1cm4gbmV3IEJ5dGUoYUJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMCAvLyAxCiAgICBiemVybwogICAgZnJhbWVfZGlnIC0xCiAgICBifAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3VpbnRuX2Zyb21fYnl0ZXMoYTogYnl0ZXMpIC0+IGJ5dGVzOgp2ZXJpZnlfdWludG5fZnJvbV9ieXRlczoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNjAtMjYxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV91aW50bl9mcm9tX2J5dGVzKGE6IGJ5dGVzKTogVWludE48MzI+IHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI2MgogICAgLy8gcmV0dXJuIGludGVycHJldEFzQXJjNDxVaW50TjwzMj4+KGEpCiAgICBmcmFtZV9kaWcgLTEKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9iaWd1aW50bl9mcm9tX2J5dGVzKGE6IGJ5dGVzKSAtPiBieXRlczoKdmVyaWZ5X2JpZ3VpbnRuX2Zyb21fYnl0ZXM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjY0LTI2NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYmlndWludG5fZnJvbV9ieXRlcyhhOiBieXRlcyk6IFVpbnROPDI1Nj4gewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjY2CiAgICAvLyByZXR1cm4gaW50ZXJwcmV0QXNBcmM0PFVpbnROPDI1Nj4+KGEpCiAgICBmcmFtZV9kaWcgLTEKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9ieXRlX2Zyb21fYnl0ZXMoYTogYnl0ZXMpIC0+IGJ5dGVzOgp2ZXJpZnlfYnl0ZV9mcm9tX2J5dGVzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI2OC0yNjkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2J5dGVfZnJvbV9ieXRlcyhhOiBieXRlcyk6IEJ5dGUgewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjcwCiAgICAvLyByZXR1cm4gaW50ZXJwcmV0QXNBcmM0PEJ5dGU+KGEpCiAgICBmcmFtZV9kaWcgLTEKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV91aW50bl9mcm9tX2xvZyhhOiBieXRlcykgLT4gYnl0ZXM6CnZlcmlmeV91aW50bl9mcm9tX2xvZzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNzItMjczCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV91aW50bl9mcm9tX2xvZyhhOiBieXRlcyk6IFVpbnROPDMyPiB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNzQKICAgIC8vIHJldHVybiBpbnRlcnByZXRBc0FyYzQ8VWludE48MzI+PihhLCAnbG9nJykKICAgIGZyYW1lX2RpZyAtMQogICAgZXh0cmFjdCA0IDAKICAgIGZyYW1lX2RpZyAtMQogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBCeXRlcyBoYXMgdmFsaWQgcHJlZml4CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludG5fZnJvbV9sb2coYTogYnl0ZXMpIC0+IGJ5dGVzOgp2ZXJpZnlfYmlndWludG5fZnJvbV9sb2c6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Mjc2LTI3NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYmlndWludG5fZnJvbV9sb2coYTogYnl0ZXMpOiBVaW50TjwyNTY+IHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI3OAogICAgLy8gcmV0dXJuIGludGVycHJldEFzQXJjNDxVaW50TjwyNTY+PihhLCAnbG9nJykKICAgIGZyYW1lX2RpZyAtMQogICAgZXh0cmFjdCA0IDAKICAgIGZyYW1lX2RpZyAtMQogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBCeXRlcyBoYXMgdmFsaWQgcHJlZml4CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYnl0ZV9mcm9tX2xvZyhhOiBieXRlcykgLT4gYnl0ZXM6CnZlcmlmeV9ieXRlX2Zyb21fbG9nOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI4MC0yODEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2J5dGVfZnJvbV9sb2coYTogYnl0ZXMpOiBCeXRlIHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI4MgogICAgLy8gcmV0dXJuIGludGVycHJldEFzQXJjNDxCeXRlPihhLCAnbG9nJykKICAgIGZyYW1lX2RpZyAtMQogICAgZXh0cmFjdCA0IDAKICAgIGZyYW1lX2RpZyAtMQogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBCeXRlcyBoYXMgdmFsaWQgcHJlZml4CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfdWZpeGVkbnhtX2J5dGVzKGE6IGJ5dGVzKSAtPiBieXRlczoKdmVyaWZ5X3VmaXhlZG54bV9ieXRlczoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyODQtMjg1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV91Zml4ZWRueG1fYnl0ZXMoYTogVUZpeGVkTnhNPDMyLCA4Pik6IGJ5dGVzIHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI4NgogICAgLy8gcmV0dXJuIGEuYnl0ZXMKICAgIGZyYW1lX2RpZyAtMQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2JpZ3VmaXhlZG54bV9ieXRlcyhhOiBieXRlcykgLT4gYnl0ZXM6CnZlcmlmeV9iaWd1Zml4ZWRueG1fYnl0ZXM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Mjg4LTI4OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYmlndWZpeGVkbnhtX2J5dGVzKGE6IFVGaXhlZE54TTwyNTYsIDE2Pik6IGJ5dGVzIHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI5MAogICAgLy8gcmV0dXJuIGEuYnl0ZXMKICAgIGZyYW1lX2RpZyAtMQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3VmaXhlZG54bV9mcm9tX2J5dGVzKGE6IGJ5dGVzKSAtPiBieXRlczoKdmVyaWZ5X3VmaXhlZG54bV9mcm9tX2J5dGVzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI5Mi0yOTMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X3VmaXhlZG54bV9mcm9tX2J5dGVzKGE6IGJ5dGVzKTogVUZpeGVkTnhNPDMyLCA4PiB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyOTQKICAgIC8vIHJldHVybiBpbnRlcnByZXRBc0FyYzQ8VUZpeGVkTnhNPDMyLCA4Pj4oYSkKICAgIGZyYW1lX2RpZyAtMQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2JpZ3VmaXhlZG54bV9mcm9tX2J5dGVzKGE6IGJ5dGVzKSAtPiBieXRlczoKdmVyaWZ5X2JpZ3VmaXhlZG54bV9mcm9tX2J5dGVzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI5Ni0yOTcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2JpZ3VmaXhlZG54bV9mcm9tX2J5dGVzKGE6IGJ5dGVzKTogVUZpeGVkTnhNPDI1NiwgMTY+IHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI5OAogICAgLy8gcmV0dXJuIGludGVycHJldEFzQXJjNDxVRml4ZWROeE08MjU2LCAxNj4+KGEpCiAgICBmcmFtZV9kaWcgLTEKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV91Zml4ZWRueG1fZnJvbV9sb2coYTogYnl0ZXMpIC0+IGJ5dGVzOgp2ZXJpZnlfdWZpeGVkbnhtX2Zyb21fbG9nOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMwMC0zMDEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X3VmaXhlZG54bV9mcm9tX2xvZyhhOiBieXRlcyk6IFVGaXhlZE54TTwzMiwgOD4gewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzAyCiAgICAvLyByZXR1cm4gaW50ZXJwcmV0QXNBcmM0PFVGaXhlZE54TTwzMiwgOD4+KGEsICdsb2cnKQogICAgZnJhbWVfZGlnIC0xCiAgICBleHRyYWN0IDQgMAogICAgZnJhbWVfZGlnIC0xCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEJ5dGVzIGhhcyB2YWxpZCBwcmVmaXgKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9iaWd1Zml4ZWRueG1fZnJvbV9sb2coYTogYnl0ZXMpIC0+IGJ5dGVzOgp2ZXJpZnlfYmlndWZpeGVkbnhtX2Zyb21fbG9nOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMwNC0zMDUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2JpZ3VmaXhlZG54bV9mcm9tX2xvZyhhOiBieXRlcyk6IFVGaXhlZE54TTwyNTYsIDE2PiB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMDYKICAgIC8vIHJldHVybiBpbnRlcnByZXRBc0FyYzQ8VUZpeGVkTnhNPDI1NiwgMTY+PihhLCAnbG9nJykKICAgIGZyYW1lX2RpZyAtMQogICAgZXh0cmFjdCA0IDAKICAgIGZyYW1lX2RpZyAtMQogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBCeXRlcyBoYXMgdmFsaWQgcHJlZml4CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfc3RyaW5nX2luaXQoYTogYnl0ZXMpIC0+IGJ5dGVzOgp2ZXJpZnlfc3RyaW5nX2luaXQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzA4LTMwOQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfc3RyaW5nX2luaXQoYTogc3RyaW5nKTogU3RyIHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMxMAogICAgLy8gY29uc3QgcmVzdWx0ID0gbmV3IFN0cihgSGVsbG8sICR7YX1gKQogICAgcHVzaGJ5dGVzICJIZWxsbywgIgogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzExCiAgICAvLyByZXR1cm4gcmVzdWx0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfc3RyaW5nX2FkZChhOiBieXRlcywgYjogYnl0ZXMpIC0+IGJ5dGVzOgp2ZXJpZnlfc3RyaW5nX2FkZDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMTMtMzE0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9zdHJpbmdfYWRkKGE6IFN0ciwgYjogU3RyKTogU3RyIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMxNQogICAgLy8gY29uc3QgcmVzdWx0ID0gYS5uYXRpdmUuY29uY2F0KGIubmF0aXZlKQogICAgZnJhbWVfZGlnIC0yCiAgICBleHRyYWN0IDIgMAogICAgZnJhbWVfZGlnIC0xCiAgICBleHRyYWN0IDIgMAogICAgY29uY2F0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzE2CiAgICAvLyByZXR1cm4gbmV3IFN0cihyZXN1bHQpCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3N0cmluZ19lcShhOiBieXRlcywgYjogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X3N0cmluZ19lcToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMTgtMzE5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9zdHJpbmdfZXEoYTogU3RyLCBiOiBTdHIpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMyMAogICAgLy8gcmV0dXJuIGEgPT09IGIKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICA9PQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3N0cmluZ19ieXRlcyhhOiBieXRlcykgLT4gYnl0ZXM6CnZlcmlmeV9zdHJpbmdfYnl0ZXM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzIyLTMyMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfc3RyaW5nX2J5dGVzKGE6IHN0cmluZyk6IGJ5dGVzIHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMyNAogICAgLy8gY29uc3QgcmVzdWx0ID0gbmV3IFN0cihhKQogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMyNQogICAgLy8gcmV0dXJuIHJlc3VsdC5ieXRlcwogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3N0cmluZ19mcm9tX2J5dGVzKGE6IGJ5dGVzKSAtPiBieXRlczoKdmVyaWZ5X3N0cmluZ19mcm9tX2J5dGVzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMyNy0zMjgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X3N0cmluZ19mcm9tX2J5dGVzKGE6IGJ5dGVzKTogU3RyIHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMyOQogICAgLy8gcmV0dXJuIGludGVycHJldEFzQXJjNDxTdHI+KGEpCiAgICBmcmFtZV9kaWcgLTEKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9zdHJpbmdfZnJvbV9sb2coYTogYnl0ZXMpIC0+IGJ5dGVzOgp2ZXJpZnlfc3RyaW5nX2Zyb21fbG9nOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMzMS0zMzIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X3N0cmluZ19mcm9tX2xvZyhhOiBieXRlcyk6IFN0ciB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMzMKICAgIC8vIHJldHVybiBpbnRlcnByZXRBc0FyYzQ8U3RyPihhLCAnbG9nJykKICAgIGZyYW1lX2RpZyAtMQogICAgZXh0cmFjdCA0IDAKICAgIGZyYW1lX2RpZyAtMQogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBCeXRlcyBoYXMgdmFsaWQgcHJlZml4CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYm9vbF9ieXRlcyhhOiBieXRlcykgLT4gYnl0ZXM6CnZlcmlmeV9ib29sX2J5dGVzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMzNS0zMzYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2Jvb2xfYnl0ZXMoYTogQm9vbCk6IGJ5dGVzIHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMzNwogICAgLy8gcmV0dXJuIGEuYnl0ZXMKICAgIGZyYW1lX2RpZyAtMQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2Jvb2xfZnJvbV9ieXRlcyhhOiBieXRlcykgLT4gYnl0ZXM6CnZlcmlmeV9ib29sX2Zyb21fYnl0ZXM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzM5LTM0MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYm9vbF9mcm9tX2J5dGVzKGE6IGJ5dGVzKTogQm9vbCB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozNDEKICAgIC8vIHJldHVybiBpbnRlcnByZXRBc0FyYzQ8Qm9vbD4oYSkKICAgIGZyYW1lX2RpZyAtMQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2Jvb2xfZnJvbV9sb2coYTogYnl0ZXMpIC0+IGJ5dGVzOgp2ZXJpZnlfYm9vbF9mcm9tX2xvZzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozNDMtMzQ0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9ib29sX2Zyb21fbG9nKGE6IGJ5dGVzKTogQm9vbCB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozNDUKICAgIC8vIHJldHVybiBpbnRlcnByZXRBc0FyYzQ8Qm9vbD4oYSwgJ2xvZycpCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgNCAwCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXMgaGFzIHZhbGlkIHByZWZpeAogICAgcmV0c3ViCg==", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC5jbGVhclN0YXRlUHJvZ3JhbToKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K" + "verify_biguintn_uintn_eq(byte[],byte[])bool": { + "call_config": { + "no_op": "CALL" + } }, - "state": { - "global": { - "num_byte_slices": 0, - "num_uints": 0 - }, - "local": { - "num_byte_slices": 0, - "num_uints": 0 - } + "verify_uintn_biguintn_eq(byte[],byte[])bool": { + "call_config": { + "no_op": "CALL" + } }, - "schema": { - "global": { - "declared": {}, - "reserved": {} - }, - "local": { - "declared": {}, - "reserved": {} - } + "verify_biguintn_biguintn_eq(byte[],byte[])bool": { + "call_config": { + "no_op": "CALL" + } }, - "contract": { - "name": "Arc4PrimitiveOpsContract", - "methods": [ - { - "name": "verify_uintn_uintn_eq", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_biguintn_uintn_eq", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_uintn_biguintn_eq", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_biguintn_biguintn_eq", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_byte_byte_eq", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_uintn_uintn_ne", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_biguintn_uintn_ne", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_uintn_biguintn_ne", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_biguintn_biguintn_ne", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_byte_byte_ne", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_uintn_uintn_lt", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_biguintn_uintn_lt", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_uintn_biguintn_lt", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_biguintn_biguintn_lt", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_byte_byte_lt", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_uintn_uintn_le", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_biguintn_uintn_le", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_uintn_biguintn_le", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_biguintn_biguintn_le", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_byte_byte_le", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_uintn_uintn_gt", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_biguintn_uintn_gt", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_uintn_biguintn_gt", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_biguintn_biguintn_gt", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_byte_byte_gt", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_uintn_uintn_ge", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_biguintn_uintn_ge", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_uintn_biguintn_ge", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_biguintn_biguintn_ge", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_byte_byte_ge", - "args": [ - { - "type": "byte[]", - "name": "a" - }, - { - "type": "byte[]", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_uintn_init", - "args": [ - { - "type": "byte[]", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "uint32" - } - }, - { - "name": "verify_biguintn_init", - "args": [ - { - "type": "byte[]", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "uint256" - } - }, - { - "name": "verify_byte_init", - "args": [ - { - "type": "byte[]", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "byte" - } - }, - { - "name": "verify_uintn_from_bytes", - "args": [ - { - "type": "byte[]", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "uint32" - } - }, - { - "name": "verify_biguintn_from_bytes", - "args": [ - { - "type": "byte[]", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "uint256" - } - }, - { - "name": "verify_byte_from_bytes", - "args": [ - { - "type": "byte[]", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "byte" - } - }, - { - "name": "verify_uintn_from_log", - "args": [ - { - "type": "byte[]", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "uint32" - } - }, - { - "name": "verify_biguintn_from_log", - "args": [ - { - "type": "byte[]", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "uint256" - } - }, - { - "name": "verify_byte_from_log", - "args": [ - { - "type": "byte[]", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "byte" - } - }, - { - "name": "verify_ufixednxm_bytes", - "args": [ - { - "type": "ufixed32x8", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "byte[]" - } - }, - { - "name": "verify_bigufixednxm_bytes", - "args": [ - { - "type": "ufixed256x16", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "byte[]" - } - }, - { - "name": "verify_ufixednxm_from_bytes", - "args": [ - { - "type": "byte[]", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "ufixed32x8" - } - }, - { - "name": "verify_bigufixednxm_from_bytes", - "args": [ - { - "type": "byte[]", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "ufixed256x16" - } - }, - { - "name": "verify_ufixednxm_from_log", - "args": [ - { - "type": "byte[]", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "ufixed32x8" - } - }, - { - "name": "verify_bigufixednxm_from_log", - "args": [ - { - "type": "byte[]", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "ufixed256x16" - } - }, - { - "name": "verify_string_init", - "args": [ - { - "type": "string", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "string" - } - }, - { - "name": "verify_string_add", - "args": [ - { - "type": "string", - "name": "a" - }, - { - "type": "string", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "string" - } - }, - { - "name": "verify_string_eq", - "args": [ - { - "type": "string", - "name": "a" - }, - { - "type": "string", - "name": "b" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_string_bytes", - "args": [ - { - "type": "string", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "byte[]" - } - }, - { - "name": "verify_string_from_bytes", - "args": [ - { - "type": "byte[]", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "string" - } - }, - { - "name": "verify_string_from_log", - "args": [ - { - "type": "byte[]", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "string" - } - }, - { - "name": "verify_bool_bytes", - "args": [ - { - "type": "bool", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "byte[]" - } - }, - { - "name": "verify_bool_from_bytes", - "args": [ - { - "type": "byte[]", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - }, - { - "name": "verify_bool_from_log", - "args": [ - { - "type": "byte[]", - "name": "a" - } - ], - "readonly": false, - "returns": { - "type": "bool" - } - } - ], - "networks": {} + "verify_byte_byte_eq(byte[],byte[])bool": { + "call_config": { + "no_op": "CALL" + } + }, + "verify_uintn_uintn_ne(byte[],byte[])bool": { + "call_config": { + "no_op": "CALL" + } + }, + "verify_biguintn_uintn_ne(byte[],byte[])bool": { + "call_config": { + "no_op": "CALL" + } + }, + "verify_uintn_biguintn_ne(byte[],byte[])bool": { + "call_config": { + "no_op": "CALL" + } + }, + "verify_biguintn_biguintn_ne(byte[],byte[])bool": { + "call_config": { + "no_op": "CALL" + } + }, + "verify_byte_byte_ne(byte[],byte[])bool": { + "call_config": { + "no_op": "CALL" + } + }, + "verify_uintn_uintn_lt(byte[],byte[])bool": { + "call_config": { + "no_op": "CALL" + } + }, + "verify_biguintn_uintn_lt(byte[],byte[])bool": { + "call_config": { + "no_op": "CALL" + } + }, + "verify_uintn_biguintn_lt(byte[],byte[])bool": { + "call_config": { + "no_op": "CALL" + } + }, + "verify_biguintn_biguintn_lt(byte[],byte[])bool": { + "call_config": { + "no_op": "CALL" + } + }, + "verify_byte_byte_lt(byte[],byte[])bool": { + "call_config": { + "no_op": "CALL" + } + }, + "verify_uintn_uintn_le(byte[],byte[])bool": { + "call_config": { + "no_op": "CALL" + } + }, + "verify_biguintn_uintn_le(byte[],byte[])bool": { + "call_config": { + "no_op": "CALL" + } + }, + "verify_uintn_biguintn_le(byte[],byte[])bool": { + "call_config": { + "no_op": "CALL" + } + }, + "verify_biguintn_biguintn_le(byte[],byte[])bool": { + "call_config": { + "no_op": "CALL" + } + }, + "verify_byte_byte_le(byte[],byte[])bool": { + "call_config": { + "no_op": "CALL" + } + }, + "verify_uintn_uintn_gt(byte[],byte[])bool": { + "call_config": { + "no_op": "CALL" + } + }, + "verify_biguintn_uintn_gt(byte[],byte[])bool": { + "call_config": { + "no_op": "CALL" + } + }, + "verify_uintn_biguintn_gt(byte[],byte[])bool": { + "call_config": { + "no_op": "CALL" + } + }, + "verify_biguintn_biguintn_gt(byte[],byte[])bool": { + "call_config": { + "no_op": "CALL" + } + }, + "verify_byte_byte_gt(byte[],byte[])bool": { + "call_config": { + "no_op": "CALL" + } + }, + "verify_uintn_uintn_ge(byte[],byte[])bool": { + "call_config": { + "no_op": "CALL" + } + }, + "verify_biguintn_uintn_ge(byte[],byte[])bool": { + "call_config": { + "no_op": "CALL" + } + }, + "verify_uintn_biguintn_ge(byte[],byte[])bool": { + "call_config": { + "no_op": "CALL" + } + }, + "verify_biguintn_biguintn_ge(byte[],byte[])bool": { + "call_config": { + "no_op": "CALL" + } + }, + "verify_byte_byte_ge(byte[],byte[])bool": { + "call_config": { + "no_op": "CALL" + } + }, + "verify_uintn_init(byte[])uint32": { + "call_config": { + "no_op": "CALL" + } + }, + "verify_biguintn_init(byte[])uint256": { + "call_config": { + "no_op": "CALL" + } + }, + "verify_byte_init(byte[])byte": { + "call_config": { + "no_op": "CALL" + } + }, + "verify_uintn_from_bytes(byte[])uint32": { + "call_config": { + "no_op": "CALL" + } + }, + "verify_biguintn_from_bytes(byte[])uint256": { + "call_config": { + "no_op": "CALL" + } + }, + "verify_byte_from_bytes(byte[])byte": { + "call_config": { + "no_op": "CALL" + } + }, + "verify_uintn_from_log(byte[])uint32": { + "call_config": { + "no_op": "CALL" + } + }, + "verify_biguintn_from_log(byte[])uint256": { + "call_config": { + "no_op": "CALL" + } + }, + "verify_byte_from_log(byte[])byte": { + "call_config": { + "no_op": "CALL" + } + }, + "verify_ufixednxm_bytes(ufixed32x8)byte[]": { + "call_config": { + "no_op": "CALL" + } + }, + "verify_bigufixednxm_bytes(ufixed256x16)byte[]": { + "call_config": { + "no_op": "CALL" + } + }, + "verify_ufixednxm_from_bytes(byte[])ufixed32x8": { + "call_config": { + "no_op": "CALL" + } + }, + "verify_bigufixednxm_from_bytes(byte[])ufixed256x16": { + "call_config": { + "no_op": "CALL" + } }, - "bare_call_config": { - "no_op": "CREATE" + "verify_ufixednxm_from_log(byte[])ufixed32x8": { + "call_config": { + "no_op": "CALL" + } + }, + "verify_bigufixednxm_from_log(byte[])ufixed256x16": { + "call_config": { + "no_op": "CALL" + } + }, + "verify_string_init(string)string": { + "call_config": { + "no_op": "CALL" + } + }, + "verify_string_add(string,string)string": { + "call_config": { + "no_op": "CALL" + } + }, + "verify_string_eq(string,string)bool": { + "call_config": { + "no_op": "CALL" + } + }, + "verify_string_bytes(string)byte[]": { + "call_config": { + "no_op": "CALL" + } + }, + "verify_string_from_bytes(byte[])string": { + "call_config": { + "no_op": "CALL" + } + }, + "verify_string_from_log(byte[])string": { + "call_config": { + "no_op": "CALL" + } + }, + "verify_bool_bytes(bool)byte[]": { + "call_config": { + "no_op": "CALL" + } + }, + "verify_bool_from_bytes(byte[])bool": { + "call_config": { + "no_op": "CALL" + } + }, + "verify_bool_from_log(byte[])bool": { + "call_config": { + "no_op": "CALL" + } + }, + "verify_emit(string,uint512,uint64,byte[],uint64,bool,byte[],string,uint64,uint256,ufixed32x8,ufixed256x16,bool,byte[],byte[],byte[])void": { + "call_config": { + "no_op": "CALL" + } } -} \ No newline at end of file + }, + "source": { + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSA4IDY0IDAKICAgIGJ5dGVjYmxvY2sgMHgxNTFmN2M3NSAweDAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A2MAogICAgcHVzaGJ5dGVzcyAweDk2ZjE0MTE2IDB4ZWQ2NjYwOTYgMHgyY2EwMzUyYiAweDg1OTA3ZDQwIDB4NGViMmFmNGEgMHgyY2JlYzQ1YiAweDA3NjY2ZmQ5IDB4MzcwYmFiZDMgMHgyYjZiM2VmMCAweDI3ZTIxYTk4IDB4MzM5ZGE5N2MgMHg3ODk4ZWQ5NyAweDFmMTMwY2VjIDB4Yzc0ODY2NGUgMHhhMmJhYzE0YiAweDdhNDYwY2IxIDB4ZGNhYjFmMDEgMHg5N2Q5MDY0ZCAweGNlMDZjMmEwIDB4N2MxMWUzNzUgMHhkY2RiY2VlMCAweDc3YTRiNjhkIDB4NGY1NDA2MjYgMHgwOTVhZWQ0MSAweGRmNzhjZGM2IDB4ZTNiN2U5MTggMHg1NTMzNzAwOCAweDliYjFjZDY2IDB4ODE0ODRkOWQgMHg3OWU5Y2IwMyAweDlhMDNkZjEwIDB4ZDNmMGU0NGIgMHg2NzNkYjJiZCAweDk4MmRiMjMzIDB4YWZmYmRmMGUgMHg4ZTRhMzBmNyAweDI4OGFmNzZlIDB4OGJkODRhMDQgMHhmY2Q1NWUxZiAweDBmMTU3NGZlIDB4YjJjYjEzYmUgMHhkMDU5ZWVhNyAweDRjYzRjMTU3IDB4M2QxN2FjNmUgMHhmN2YzZDVmYyAweGY4YzhmOGQ1IDB4NDNmNzE2MmEgMHg0MmUwOTA3NSAweGQ5NTZmNTc1IDB4NmMwMTYwZGYgMHhhODkwMTUwYiAweDBiMmY0YzNmIDB4OWRiOWQzMjcgMHhlNGQ5NTBhMSAweGI2MDVlODBjIC8vIG1ldGhvZCAidmVyaWZ5X3VpbnRuX3VpbnRuX2VxKGJ5dGVbXSxieXRlW10pYm9vbCIsIG1ldGhvZCAidmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2VxKGJ5dGVbXSxieXRlW10pYm9vbCIsIG1ldGhvZCAidmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX2VxKGJ5dGVbXSxieXRlW10pYm9vbCIsIG1ldGhvZCAidmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX2VxKGJ5dGVbXSxieXRlW10pYm9vbCIsIG1ldGhvZCAidmVyaWZ5X2J5dGVfYnl0ZV9lcShieXRlW10sYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV91aW50bl91aW50bl9uZShieXRlW10sYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV9iaWd1aW50bl91aW50bl9uZShieXRlW10sYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV91aW50bl9iaWd1aW50bl9uZShieXRlW10sYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9uZShieXRlW10sYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV9ieXRlX2J5dGVfbmUoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfdWludG5fdWludG5fbHQoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfYmlndWludG5fdWludG5fbHQoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfdWludG5fYmlndWludG5fbHQoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfYmlndWludG5fYmlndWludG5fbHQoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfYnl0ZV9ieXRlX2x0KGJ5dGVbXSxieXRlW10pYm9vbCIsIG1ldGhvZCAidmVyaWZ5X3VpbnRuX3VpbnRuX2xlKGJ5dGVbXSxieXRlW10pYm9vbCIsIG1ldGhvZCAidmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2xlKGJ5dGVbXSxieXRlW10pYm9vbCIsIG1ldGhvZCAidmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX2xlKGJ5dGVbXSxieXRlW10pYm9vbCIsIG1ldGhvZCAidmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX2xlKGJ5dGVbXSxieXRlW10pYm9vbCIsIG1ldGhvZCAidmVyaWZ5X2J5dGVfYnl0ZV9sZShieXRlW10sYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV91aW50bl91aW50bl9ndChieXRlW10sYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV9iaWd1aW50bl91aW50bl9ndChieXRlW10sYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV91aW50bl9iaWd1aW50bl9ndChieXRlW10sYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9ndChieXRlW10sYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV9ieXRlX2J5dGVfZ3QoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfdWludG5fdWludG5fZ2UoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfYmlndWludG5fdWludG5fZ2UoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfdWludG5fYmlndWludG5fZ2UoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfYmlndWludG5fYmlndWludG5fZ2UoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfYnl0ZV9ieXRlX2dlKGJ5dGVbXSxieXRlW10pYm9vbCIsIG1ldGhvZCAidmVyaWZ5X3VpbnRuX2luaXQoYnl0ZVtdKXVpbnQzMiIsIG1ldGhvZCAidmVyaWZ5X2JpZ3VpbnRuX2luaXQoYnl0ZVtdKXVpbnQyNTYiLCBtZXRob2QgInZlcmlmeV9ieXRlX2luaXQoYnl0ZVtdKWJ5dGUiLCBtZXRob2QgInZlcmlmeV91aW50bl9mcm9tX2J5dGVzKGJ5dGVbXSl1aW50MzIiLCBtZXRob2QgInZlcmlmeV9iaWd1aW50bl9mcm9tX2J5dGVzKGJ5dGVbXSl1aW50MjU2IiwgbWV0aG9kICJ2ZXJpZnlfYnl0ZV9mcm9tX2J5dGVzKGJ5dGVbXSlieXRlIiwgbWV0aG9kICJ2ZXJpZnlfdWludG5fZnJvbV9sb2coYnl0ZVtdKXVpbnQzMiIsIG1ldGhvZCAidmVyaWZ5X2JpZ3VpbnRuX2Zyb21fbG9nKGJ5dGVbXSl1aW50MjU2IiwgbWV0aG9kICJ2ZXJpZnlfYnl0ZV9mcm9tX2xvZyhieXRlW10pYnl0ZSIsIG1ldGhvZCAidmVyaWZ5X3VmaXhlZG54bV9ieXRlcyh1Zml4ZWQzMng4KWJ5dGVbXSIsIG1ldGhvZCAidmVyaWZ5X2JpZ3VmaXhlZG54bV9ieXRlcyh1Zml4ZWQyNTZ4MTYpYnl0ZVtdIiwgbWV0aG9kICJ2ZXJpZnlfdWZpeGVkbnhtX2Zyb21fYnl0ZXMoYnl0ZVtdKXVmaXhlZDMyeDgiLCBtZXRob2QgInZlcmlmeV9iaWd1Zml4ZWRueG1fZnJvbV9ieXRlcyhieXRlW10pdWZpeGVkMjU2eDE2IiwgbWV0aG9kICJ2ZXJpZnlfdWZpeGVkbnhtX2Zyb21fbG9nKGJ5dGVbXSl1Zml4ZWQzMng4IiwgbWV0aG9kICJ2ZXJpZnlfYmlndWZpeGVkbnhtX2Zyb21fbG9nKGJ5dGVbXSl1Zml4ZWQyNTZ4MTYiLCBtZXRob2QgInZlcmlmeV9zdHJpbmdfaW5pdChzdHJpbmcpc3RyaW5nIiwgbWV0aG9kICJ2ZXJpZnlfc3RyaW5nX2FkZChzdHJpbmcsc3RyaW5nKXN0cmluZyIsIG1ldGhvZCAidmVyaWZ5X3N0cmluZ19lcShzdHJpbmcsc3RyaW5nKWJvb2wiLCBtZXRob2QgInZlcmlmeV9zdHJpbmdfYnl0ZXMoc3RyaW5nKWJ5dGVbXSIsIG1ldGhvZCAidmVyaWZ5X3N0cmluZ19mcm9tX2J5dGVzKGJ5dGVbXSlzdHJpbmciLCBtZXRob2QgInZlcmlmeV9zdHJpbmdfZnJvbV9sb2coYnl0ZVtdKXN0cmluZyIsIG1ldGhvZCAidmVyaWZ5X2Jvb2xfYnl0ZXMoYm9vbClieXRlW10iLCBtZXRob2QgInZlcmlmeV9ib29sX2Zyb21fYnl0ZXMoYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV9ib29sX2Zyb21fbG9nKGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfZW1pdChzdHJpbmcsdWludDUxMix1aW50NjQsYnl0ZVtdLHVpbnQ2NCxib29sLGJ5dGVbXSxzdHJpbmcsdWludDY0LHVpbnQyNTYsdWZpeGVkMzJ4OCx1Zml4ZWQyNTZ4MTYsYm9vbCxieXRlW10sYnl0ZVtdLGJ5dGVbXSl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl92ZXJpZnlfdWludG5fdWludG5fZXFfcm91dGVAMyBtYWluX3ZlcmlmeV9iaWd1aW50bl91aW50bl9lcV9yb3V0ZUA0IG1haW5fdmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX2VxX3JvdXRlQDUgbWFpbl92ZXJpZnlfYmlndWludG5fYmlndWludG5fZXFfcm91dGVANiBtYWluX3ZlcmlmeV9ieXRlX2J5dGVfZXFfcm91dGVANyBtYWluX3ZlcmlmeV91aW50bl91aW50bl9uZV9yb3V0ZUA4IG1haW5fdmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX25lX3JvdXRlQDkgbWFpbl92ZXJpZnlfdWludG5fYmlndWludG5fbmVfcm91dGVAMTAgbWFpbl92ZXJpZnlfYmlndWludG5fYmlndWludG5fbmVfcm91dGVAMTEgbWFpbl92ZXJpZnlfYnl0ZV9ieXRlX25lX3JvdXRlQDEyIG1haW5fdmVyaWZ5X3VpbnRuX3VpbnRuX2x0X3JvdXRlQDEzIG1haW5fdmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2x0X3JvdXRlQDE0IG1haW5fdmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX2x0X3JvdXRlQDE1IG1haW5fdmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX2x0X3JvdXRlQDE2IG1haW5fdmVyaWZ5X2J5dGVfYnl0ZV9sdF9yb3V0ZUAxNyBtYWluX3ZlcmlmeV91aW50bl91aW50bl9sZV9yb3V0ZUAxOCBtYWluX3ZlcmlmeV9iaWd1aW50bl91aW50bl9sZV9yb3V0ZUAxOSBtYWluX3ZlcmlmeV91aW50bl9iaWd1aW50bl9sZV9yb3V0ZUAyMCBtYWluX3ZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9sZV9yb3V0ZUAyMSBtYWluX3ZlcmlmeV9ieXRlX2J5dGVfbGVfcm91dGVAMjIgbWFpbl92ZXJpZnlfdWludG5fdWludG5fZ3Rfcm91dGVAMjMgbWFpbl92ZXJpZnlfYmlndWludG5fdWludG5fZ3Rfcm91dGVAMjQgbWFpbl92ZXJpZnlfdWludG5fYmlndWludG5fZ3Rfcm91dGVAMjUgbWFpbl92ZXJpZnlfYmlndWludG5fYmlndWludG5fZ3Rfcm91dGVAMjYgbWFpbl92ZXJpZnlfYnl0ZV9ieXRlX2d0X3JvdXRlQDI3IG1haW5fdmVyaWZ5X3VpbnRuX3VpbnRuX2dlX3JvdXRlQDI4IG1haW5fdmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2dlX3JvdXRlQDI5IG1haW5fdmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX2dlX3JvdXRlQDMwIG1haW5fdmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX2dlX3JvdXRlQDMxIG1haW5fdmVyaWZ5X2J5dGVfYnl0ZV9nZV9yb3V0ZUAzMiBtYWluX3ZlcmlmeV91aW50bl9pbml0X3JvdXRlQDMzIG1haW5fdmVyaWZ5X2JpZ3VpbnRuX2luaXRfcm91dGVAMzQgbWFpbl92ZXJpZnlfYnl0ZV9pbml0X3JvdXRlQDM1IG1haW5fdmVyaWZ5X3VpbnRuX2Zyb21fYnl0ZXNfcm91dGVAMzYgbWFpbl92ZXJpZnlfYmlndWludG5fZnJvbV9ieXRlc19yb3V0ZUAzNyBtYWluX3ZlcmlmeV9ieXRlX2Zyb21fYnl0ZXNfcm91dGVAMzggbWFpbl92ZXJpZnlfdWludG5fZnJvbV9sb2dfcm91dGVAMzkgbWFpbl92ZXJpZnlfYmlndWludG5fZnJvbV9sb2dfcm91dGVANDAgbWFpbl92ZXJpZnlfYnl0ZV9mcm9tX2xvZ19yb3V0ZUA0MSBtYWluX3ZlcmlmeV91Zml4ZWRueG1fYnl0ZXNfcm91dGVANDIgbWFpbl92ZXJpZnlfYmlndWZpeGVkbnhtX2J5dGVzX3JvdXRlQDQzIG1haW5fdmVyaWZ5X3VmaXhlZG54bV9mcm9tX2J5dGVzX3JvdXRlQDQ0IG1haW5fdmVyaWZ5X2JpZ3VmaXhlZG54bV9mcm9tX2J5dGVzX3JvdXRlQDQ1IG1haW5fdmVyaWZ5X3VmaXhlZG54bV9mcm9tX2xvZ19yb3V0ZUA0NiBtYWluX3ZlcmlmeV9iaWd1Zml4ZWRueG1fZnJvbV9sb2dfcm91dGVANDcgbWFpbl92ZXJpZnlfc3RyaW5nX2luaXRfcm91dGVANDggbWFpbl92ZXJpZnlfc3RyaW5nX2FkZF9yb3V0ZUA0OSBtYWluX3ZlcmlmeV9zdHJpbmdfZXFfcm91dGVANTAgbWFpbl92ZXJpZnlfc3RyaW5nX2J5dGVzX3JvdXRlQDUxIG1haW5fdmVyaWZ5X3N0cmluZ19mcm9tX2J5dGVzX3JvdXRlQDUyIG1haW5fdmVyaWZ5X3N0cmluZ19mcm9tX2xvZ19yb3V0ZUA1MyBtYWluX3ZlcmlmeV9ib29sX2J5dGVzX3JvdXRlQDU0IG1haW5fdmVyaWZ5X2Jvb2xfZnJvbV9ieXRlc19yb3V0ZUA1NSBtYWluX3ZlcmlmeV9ib29sX2Zyb21fbG9nX3JvdXRlQDU2IG1haW5fdmVyaWZ5X2VtaXRfcm91dGVANTcKCm1haW5fYWZ0ZXJfaWZfZWxzZUA2NDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18zIC8vIDAKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfZW1pdF9yb3V0ZUA1NzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozNDkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgOAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgOQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMTAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDExCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxMgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMTMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDE0CiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMTUKICAgIGR1cAogICAgaW50Y18zIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBkaWcgMQogICAgcHVzaGludCAyIC8vIDIKICAgIGV4dHJhY3RfdWludDE2CiAgICBzdWJzdHJpbmczCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMTUKICAgIGR1cAogICAgcHVzaGludCAyIC8vIDIKICAgIGV4dHJhY3RfdWludDE2CiAgICBkaWcgMQogICAgbGVuCiAgICBzdWJzdHJpbmczCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM0OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2VtaXQKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2Jvb2xfZnJvbV9sb2dfcm91dGVANTY6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzQzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzQzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYm9vbF9mcm9tX2xvZwogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYm9vbF9mcm9tX2J5dGVzX3JvdXRlQDU1OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMzOQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMzOQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2Jvb2xfYnl0ZXNfcm91dGVANTQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzM1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMzUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfc3RyaW5nX2Zyb21fbG9nX3JvdXRlQDUzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMzMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMzMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3N0cmluZ19mcm9tX2xvZwogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfc3RyaW5nX2Zyb21fYnl0ZXNfcm91dGVANTI6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzI3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzI3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfc3RyaW5nX2J5dGVzX3JvdXRlQDUxOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMyMgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMyMgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3N0cmluZ19ieXRlcwogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X3N0cmluZ19lcV9yb3V0ZUA1MDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMTgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMxOAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3N0cmluZ19lcQogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzMgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X3N0cmluZ19hZGRfcm91dGVANDk6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzEzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMTMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9zdHJpbmdfYWRkCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9zdHJpbmdfaW5pdF9yb3V0ZUA0ODoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMDgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMDgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9zdHJpbmdfaW5pdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYmlndWZpeGVkbnhtX2Zyb21fbG9nX3JvdXRlQDQ3OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMwNAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMwNAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2JpZ3VmaXhlZG54bV9mcm9tX2xvZwogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfdWZpeGVkbnhtX2Zyb21fbG9nX3JvdXRlQDQ2OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMwMAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMwMAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3VmaXhlZG54bV9mcm9tX2xvZwogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYmlndWZpeGVkbnhtX2Zyb21fYnl0ZXNfcm91dGVANDU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Mjk2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Mjk2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfdWZpeGVkbnhtX2Zyb21fYnl0ZXNfcm91dGVANDQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjkyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjkyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYmlndWZpeGVkbnhtX2J5dGVzX3JvdXRlQDQzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI4OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Mjg4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X3VmaXhlZG54bV9ieXRlc19yb3V0ZUA0MjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyODQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI4NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9ieXRlX2Zyb21fbG9nX3JvdXRlQDQxOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI4MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI4MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2J5dGVfZnJvbV9sb2cKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2JpZ3VpbnRuX2Zyb21fbG9nX3JvdXRlQDQwOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI3NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI3NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2JpZ3VpbnRuX2Zyb21fbG9nCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV91aW50bl9mcm9tX2xvZ19yb3V0ZUAzOToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNzIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNzIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV91aW50bl9mcm9tX2xvZwogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYnl0ZV9mcm9tX2J5dGVzX3JvdXRlQDM4OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI2OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI2OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2JpZ3VpbnRuX2Zyb21fYnl0ZXNfcm91dGVAMzc6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjY0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjY0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfdWludG5fZnJvbV9ieXRlc19yb3V0ZUAzNjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNjAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNjAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9ieXRlX2luaXRfcm91dGVAMzU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjU1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjU1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYnl0ZV9pbml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9iaWd1aW50bl9pbml0X3JvdXRlQDM0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI1MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI1MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2JpZ3VpbnRuX2luaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X3VpbnRuX2luaXRfcm91dGVAMzM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjQ1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjQ1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfdWludG5faW5pdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYnl0ZV9ieXRlX2dlX3JvdXRlQDMyOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIzNwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMzcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9ieXRlX2J5dGVfZ2UKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9nZV9yb3V0ZUAzMToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMjkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjI5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYmlndWludG5fYmlndWludG5fZ2UKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV91aW50bl9iaWd1aW50bl9nZV9yb3V0ZUAzMDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMjEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjIxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfdWludG5fYmlndWludG5fZ2UKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9iaWd1aW50bl91aW50bl9nZV9yb3V0ZUAyOToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMTMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjEzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYmlndWludG5fdWludG5fZ2UKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV91aW50bl91aW50bl9nZV9yb3V0ZUAyODoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMDUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjA1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfdWludG5fdWludG5fZ2UKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9ieXRlX2J5dGVfZ3Rfcm91dGVAMjc6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTk3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE5NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2J5dGVfYnl0ZV9ndAogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzMgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX2d0X3JvdXRlQDI2OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE4OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxODkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9ndAogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzMgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX2d0X3JvdXRlQDI1OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE4MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxODEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV91aW50bl9iaWd1aW50bl9ndAogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzMgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2d0X3JvdXRlQDI0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE3MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxNzMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9iaWd1aW50bl91aW50bl9ndAogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzMgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X3VpbnRuX3VpbnRuX2d0X3JvdXRlQDIzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE2NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxNjUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV91aW50bl91aW50bl9ndAogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzMgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2J5dGVfYnl0ZV9sZV9yb3V0ZUAyMjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxNTcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTU3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYnl0ZV9ieXRlX2xlCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMyAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYmlndWludG5fYmlndWludG5fbGVfcm91dGVAMjE6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTQ5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE0OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX2xlCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMyAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfdWludG5fYmlndWludG5fbGVfcm91dGVAMjA6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTQxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE0MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX2xlCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMyAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYmlndWludG5fdWludG5fbGVfcm91dGVAMTk6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTMzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEzMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2xlCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMyAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfdWludG5fdWludG5fbGVfcm91dGVAMTg6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTI1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEyNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3VpbnRuX3VpbnRuX2xlCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMyAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYnl0ZV9ieXRlX2x0X3JvdXRlQDE3OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjExNwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMTcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9ieXRlX2J5dGVfbHQKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9sdF9yb3V0ZUAxNjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMDkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTA5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYmlndWludG5fYmlndWludG5fbHQKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV91aW50bl9iaWd1aW50bl9sdF9yb3V0ZUAxNToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMDEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTAxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfdWludG5fYmlndWludG5fbHQKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9iaWd1aW50bl91aW50bl9sdF9yb3V0ZUAxNDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo5MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo5MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2x0CiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMyAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfdWludG5fdWludG5fbHRfcm91dGVAMTM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV91aW50bl91aW50bl9sdAogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzMgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2J5dGVfYnl0ZV9uZV9yb3V0ZUAxMjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo3NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo3NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2J5dGVfYnl0ZV9uZQogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzMgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX25lX3JvdXRlQDExOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjY5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjY5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYmlndWludG5fYmlndWludG5fbmUKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV91aW50bl9iaWd1aW50bl9uZV9yb3V0ZUAxMDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo2MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo2MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX25lCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMyAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYmlndWludG5fdWludG5fbmVfcm91dGVAOToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo1MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo1MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX25lCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMyAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfdWludG5fdWludG5fbmVfcm91dGVAODoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3VpbnRuX3VpbnRuX25lCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMyAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYnl0ZV9ieXRlX2VxX3JvdXRlQDc6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9ieXRlX2J5dGVfZXEKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9lcV9yb3V0ZUA2OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYmlndWludG5fYmlndWludG5fZXEKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV91aW50bl9iaWd1aW50bl9lcV9yb3V0ZUA1OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfdWludG5fYmlndWludG5fZXEKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9iaWd1aW50bl91aW50bl9lcV9yb3V0ZUA0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYmlndWludG5fdWludG5fZXEKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV91aW50bl91aW50bl9lcV9yb3V0ZUAzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3VpbnRuX3VpbnRuX2VxCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMyAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdANjA6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VANjQKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3VpbnRuX3VpbnRuX2VxKGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfdWludG5fdWludG5fZXE6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NS02CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV91aW50bl91aW50bl9lcShhOiBieXRlcywgYjogYnl0ZXMpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjkKICAgIC8vIGNvbnN0IGFVaW50TiA9IG5ldyBVaW50Tjw2ND4oYUJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMSAvLyA4CiAgICBiemVybwogICAgZnJhbWVfZGlnIC0yCiAgICBkaWcgMQogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMAogICAgLy8gY29uc3QgYlVpbnROID0gbmV3IFVpbnROPDY0PihiQmlndWludCkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgZnJhbWVfZGlnIC0xCiAgICB1bmNvdmVyIDIKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTEKICAgIC8vIHJldHVybiBhVWludE4gPT09IGJVaW50TgogICAgPT0KICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9iaWd1aW50bl91aW50bl9lcShhOiBieXRlcywgYjogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2VxOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEzLTE0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9iaWd1aW50bl91aW50bl9lcShhOiBieXRlcywgYjogYnl0ZXMpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE3CiAgICAvLyBjb25zdCBhVWludE4gPSBuZXcgVWludE48NTEyPihhQmlndWludCkKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpbnRjXzIgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMiAvLyA2NAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gY29uc3QgYlVpbnROID0gbmV3IFVpbnROPDY0PihiQmlndWludCkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18xIC8vIDgKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTEKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTkKICAgIC8vIHJldHVybiBhVWludE4uYnl0ZXMuZXF1YWxzKGJVaW50Ti5ieXRlcykKICAgID09CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfdWludG5fYmlndWludG5fZXEoYTogYnl0ZXMsIGI6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV91aW50bl9iaWd1aW50bl9lcToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMS0yMgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfdWludG5fYmlndWludG5fZXEoYTogYnl0ZXMsIGI6IGJ5dGVzKTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNQogICAgLy8gY29uc3QgYVVpbnROID0gbmV3IFVpbnROPDY0PihhQmlndWludCkKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18xIC8vIDgKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTIKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjYKICAgIC8vIGNvbnN0IGJVaW50TiA9IG5ldyBVaW50Tjw1MTI+KGJCaWd1aW50KQogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGludGNfMiAvLyA2NAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18yIC8vIDY0CiAgICBiemVybwogICAgZnJhbWVfZGlnIC0xCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI3CiAgICAvLyByZXR1cm4gYVVpbnROLmJ5dGVzLmVxdWFscyhiVWludE4uYnl0ZXMpCiAgICA9PQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX2VxKGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfYmlndWludG5fYmlndWludG5fZXE6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjktMzAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX2VxKGE6IGJ5dGVzLCBiOiBieXRlcyk6IGJvb2xlYW4gewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzMKICAgIC8vIGNvbnN0IGFVaW50TiA9IG5ldyBVaW50Tjw1MTI+KGFCaWd1aW50KQogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIGludGNfMiAvLyA2NAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18yIC8vIDY0CiAgICBiemVybwogICAgZnJhbWVfZGlnIC0yCiAgICBkaWcgMQogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozNAogICAgLy8gY29uc3QgYlVpbnROID0gbmV3IFVpbnROPDUxMj4oYkJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgaW50Y18yIC8vIDY0CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBmcmFtZV9kaWcgLTEKICAgIHVuY292ZXIgMgogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozNQogICAgLy8gcmV0dXJuIGFVaW50TiA9PT0gYlVpbnROCiAgICA9PQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2J5dGVfYnl0ZV9lcShhOiBieXRlcywgYjogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X2J5dGVfYnl0ZV9lcToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozNy0zOAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYnl0ZV9ieXRlX2VxKGE6IGJ5dGVzLCBiOiBieXRlcyk6IGJvb2xlYW4gewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDEKICAgIC8vIGNvbnN0IGFCeXRlID0gbmV3IEJ5dGUoYUJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMCAvLyAxCiAgICBiemVybwogICAgZnJhbWVfZGlnIC0yCiAgICBkaWcgMQogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0MgogICAgLy8gY29uc3QgYkJ5dGUgPSBuZXcgQnl0ZShiQmlndWludCkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgZnJhbWVfZGlnIC0xCiAgICB1bmNvdmVyIDIKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDMKICAgIC8vIHJldHVybiBhQnl0ZSA9PT0gYkJ5dGUKICAgID09CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfdWludG5fdWludG5fbmUoYTogYnl0ZXMsIGI6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV91aW50bl91aW50bl9uZToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0NS00NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfdWludG5fdWludG5fbmUoYTogYnl0ZXMsIGI6IGJ5dGVzKTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0OQogICAgLy8gY29uc3QgYVVpbnROID0gbmV3IFVpbnROPDY0PihhQmlndWludCkKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18xIC8vIDgKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTIKICAgIGRpZyAxCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjUwCiAgICAvLyBjb25zdCBiVWludE4gPSBuZXcgVWludE48NjQ+KGJCaWd1aW50KQogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGludGNfMSAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBmcmFtZV9kaWcgLTEKICAgIHVuY292ZXIgMgogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo1MQogICAgLy8gcmV0dXJuIGFVaW50TiAhPT0gYlVpbnROCiAgICAhPQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX25lKGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfYmlndWludG5fdWludG5fbmU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NTMtNTQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX25lKGE6IGJ5dGVzLCBiOiBieXRlcyk6IGJvb2xlYW4gewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NTcKICAgIC8vIGNvbnN0IGFVaW50TiA9IG5ldyBVaW50Tjw1MTI+KGFCaWd1aW50KQogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIGludGNfMiAvLyA2NAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18yIC8vIDY0CiAgICBiemVybwogICAgZnJhbWVfZGlnIC0yCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjU4CiAgICAvLyBjb25zdCBiVWludE4gPSBuZXcgVWludE48NjQ+KGJCaWd1aW50KQogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGludGNfMSAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzEgLy8gOAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMQogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo1OQogICAgLy8gcmV0dXJuICFhVWludE4uYnl0ZXMuZXF1YWxzKGJVaW50Ti5ieXRlcykKICAgID09CiAgICAhCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfdWludG5fYmlndWludG5fbmUoYTogYnl0ZXMsIGI6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV91aW50bl9iaWd1aW50bl9uZToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo2MS02MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfdWludG5fYmlndWludG5fbmUoYTogYnl0ZXMsIGI6IGJ5dGVzKTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo2NQogICAgLy8gY29uc3QgYVVpbnROID0gbmV3IFVpbnROPDY0PihhQmlndWludCkKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18xIC8vIDgKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTIKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjYKICAgIC8vIGNvbnN0IGJVaW50TiA9IG5ldyBVaW50Tjw1MTI+KGJCaWd1aW50KQogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGludGNfMiAvLyA2NAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18yIC8vIDY0CiAgICBiemVybwogICAgZnJhbWVfZGlnIC0xCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjY3CiAgICAvLyByZXR1cm4gIWFVaW50Ti5ieXRlcy5lcXVhbHMoYlVpbnROLmJ5dGVzKQogICAgPT0KICAgICEKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9uZShhOiBieXRlcywgYjogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX25lOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjY5LTcwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9uZShhOiBieXRlcywgYjogYnl0ZXMpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjczCiAgICAvLyBjb25zdCBhVWludE4gPSBuZXcgVWludE48NTEyPihhQmlndWludCkKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpbnRjXzIgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMiAvLyA2NAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgZGlnIDEKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NzQKICAgIC8vIGNvbnN0IGJVaW50TiA9IG5ldyBVaW50Tjw1MTI+KGJCaWd1aW50KQogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGludGNfMiAvLyA2NAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgZnJhbWVfZGlnIC0xCiAgICB1bmNvdmVyIDIKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NzUKICAgIC8vIHJldHVybiBhVWludE4gIT09IGJVaW50TgogICAgIT0KICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9ieXRlX2J5dGVfbmUoYTogYnl0ZXMsIGI6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV9ieXRlX2J5dGVfbmU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NzctNzgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2J5dGVfYnl0ZV9uZShhOiBieXRlcywgYjogYnl0ZXMpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjgxCiAgICAvLyBjb25zdCBhQnl0ZSA9IG5ldyBCeXRlKGFCaWd1aW50KQogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIGludGNfMCAvLyAxCiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzAgLy8gMQogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgZGlnIDEKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODIKICAgIC8vIGNvbnN0IGJCeXRlID0gbmV3IEJ5dGUoYkJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGZyYW1lX2RpZyAtMQogICAgdW5jb3ZlciAyCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjgzCiAgICAvLyByZXR1cm4gYUJ5dGUgIT09IGJCeXRlCiAgICAhPQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3VpbnRuX3VpbnRuX2x0KGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfdWludG5fdWludG5fbHQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODUtODYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X3VpbnRuX3VpbnRuX2x0KGE6IGJ5dGVzLCBiOiBieXRlcyk6IGJvb2xlYW4gewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODkKICAgIC8vIGNvbnN0IGFVaW50TiA9IG5ldyBVaW50Tjw2ND4oYUJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMSAvLyA4CiAgICBiemVybwogICAgZnJhbWVfZGlnIC0yCiAgICBkaWcgMQogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo5MAogICAgLy8gY29uc3QgYlVpbnROID0gbmV3IFVpbnROPDY0PihiQmlndWludCkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgZnJhbWVfZGlnIC0xCiAgICB1bmNvdmVyIDIKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OTEKICAgIC8vIHJldHVybiBhVWludE4ubmF0aXZlIDwgYlVpbnROLm5hdGl2ZQogICAgc3dhcAogICAgYnRvaQogICAgc3dhcAogICAgYnRvaQogICAgPAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2x0KGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfYmlndWludG5fdWludG5fbHQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OTMtOTQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2x0KGE6IGJ5dGVzLCBiOiBieXRlcyk6IGJvb2xlYW4gewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OTcKICAgIC8vIGNvbnN0IGFVaW50TiA9IG5ldyBVaW50Tjw1MTI+KGFCaWd1aW50KQogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIGludGNfMiAvLyA2NAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18yIC8vIDY0CiAgICBiemVybwogICAgZnJhbWVfZGlnIC0yCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjk4CiAgICAvLyBjb25zdCBiVWludE4gPSBuZXcgVWludE48NjQ+KGJCaWd1aW50KQogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGludGNfMSAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzEgLy8gOAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMQogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo5OQogICAgLy8gcmV0dXJuIGFVaW50Ti5uYXRpdmUgPCBCaWdVaW50KGJVaW50Ti5uYXRpdmUpCiAgICBidG9pCiAgICBpdG9iCiAgICBiPAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX2x0KGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfdWludG5fYmlndWludG5fbHQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTAxLTEwMgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfdWludG5fYmlndWludG5fbHQoYTogYnl0ZXMsIGI6IGJ5dGVzKTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMDUKICAgIC8vIGNvbnN0IGFVaW50TiA9IG5ldyBVaW50Tjw2ND4oYUJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMSAvLyA4CiAgICBiemVybwogICAgZnJhbWVfZGlnIC0yCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEwNgogICAgLy8gY29uc3QgYlVpbnROID0gbmV3IFVpbnROPDUxMj4oYkJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgaW50Y18yIC8vIDY0CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzIgLy8gNjQKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTEKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTA3CiAgICAvLyByZXR1cm4gQmlnVWludChhVWludE4ubmF0aXZlKSA8IGJVaW50Ti5uYXRpdmUKICAgIHN3YXAKICAgIGJ0b2kKICAgIGl0b2IKICAgIGI+CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludG5fYmlndWludG5fbHQoYTogYnl0ZXMsIGI6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9sdDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMDktMTEwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9sdChhOiBieXRlcywgYjogYnl0ZXMpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjExMwogICAgLy8gY29uc3QgYVVpbnROID0gbmV3IFVpbnROPDUxMj4oYUJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaW50Y18yIC8vIDY0CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzIgLy8gNjQKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTIKICAgIGRpZyAxCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjExNAogICAgLy8gY29uc3QgYlVpbnROID0gbmV3IFVpbnROPDUxMj4oYkJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgaW50Y18yIC8vIDY0CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBmcmFtZV9kaWcgLTEKICAgIHVuY292ZXIgMgogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMTUKICAgIC8vIHJldHVybiBhVWludE4ubmF0aXZlIDwgYlVpbnROLm5hdGl2ZQogICAgYjwKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9ieXRlX2J5dGVfbHQoYTogYnl0ZXMsIGI6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV9ieXRlX2J5dGVfbHQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTE3LTExOAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYnl0ZV9ieXRlX2x0KGE6IGJ5dGVzLCBiOiBieXRlcyk6IGJvb2xlYW4gewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTIxCiAgICAvLyBjb25zdCBhQnl0ZSA9IG5ldyBCeXRlKGFCaWd1aW50KQogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIGludGNfMCAvLyAxCiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzAgLy8gMQogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgZGlnIDEKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTIyCiAgICAvLyBjb25zdCBiQnl0ZSA9IG5ldyBCeXRlKGJCaWd1aW50KQogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGludGNfMCAvLyAxCiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBmcmFtZV9kaWcgLTEKICAgIHVuY292ZXIgMgogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMjMKICAgIC8vIHJldHVybiBhQnl0ZS5uYXRpdmUgPCBiQnl0ZS5uYXRpdmUKICAgIHN3YXAKICAgIGJ0b2kKICAgIHN3YXAKICAgIGJ0b2kKICAgIDwKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV91aW50bl91aW50bl9sZShhOiBieXRlcywgYjogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X3VpbnRuX3VpbnRuX2xlOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEyNS0xMjYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X3VpbnRuX3VpbnRuX2xlKGE6IGJ5dGVzLCBiOiBieXRlcyk6IGJvb2xlYW4gewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTI5CiAgICAvLyBjb25zdCBhVWludE4gPSBuZXcgVWludE48NjQ+KGFCaWd1aW50KQogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIGludGNfMSAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzEgLy8gOAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgZGlnIDEKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTMwCiAgICAvLyBjb25zdCBiVWludE4gPSBuZXcgVWludE48NjQ+KGJCaWd1aW50KQogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGludGNfMSAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBmcmFtZV9kaWcgLTEKICAgIHVuY292ZXIgMgogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMzEKICAgIC8vIHJldHVybiBhVWludE4ubmF0aXZlIDw9IGJVaW50Ti5uYXRpdmUKICAgIHN3YXAKICAgIGJ0b2kKICAgIHN3YXAKICAgIGJ0b2kKICAgIDw9CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludG5fdWludG5fbGUoYTogYnl0ZXMsIGI6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV9iaWd1aW50bl91aW50bl9sZToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMzMtMTM0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9iaWd1aW50bl91aW50bl9sZShhOiBieXRlcywgYjogYnl0ZXMpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEzNwogICAgLy8gY29uc3QgYVVpbnROID0gbmV3IFVpbnROPDUxMj4oYUJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaW50Y18yIC8vIDY0CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzIgLy8gNjQKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTIKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTM4CiAgICAvLyBjb25zdCBiVWludE4gPSBuZXcgVWludE48NjQ+KGJCaWd1aW50KQogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGludGNfMSAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzEgLy8gOAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMQogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMzkKICAgIC8vIHJldHVybiBhVWludE4ubmF0aXZlIDw9IEJpZ1VpbnQoYlVpbnROLm5hdGl2ZSkKICAgIGJ0b2kKICAgIGl0b2IKICAgIGI8PQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX2xlKGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfdWludG5fYmlndWludG5fbGU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTQxLTE0MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfdWludG5fYmlndWludG5fbGUoYTogYnl0ZXMsIGI6IGJ5dGVzKTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxNDUKICAgIC8vIGNvbnN0IGFVaW50TiA9IG5ldyBVaW50Tjw2ND4oYUJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMSAvLyA4CiAgICBiemVybwogICAgZnJhbWVfZGlnIC0yCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE0NgogICAgLy8gY29uc3QgYlVpbnROID0gbmV3IFVpbnROPDUxMj4oYkJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgaW50Y18yIC8vIDY0CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzIgLy8gNjQKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTEKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTQ3CiAgICAvLyByZXR1cm4gQmlnVWludChhVWludE4ubmF0aXZlKSA8PSBiVWludE4ubmF0aXZlCiAgICBzd2FwCiAgICBidG9pCiAgICBpdG9iCiAgICBiPj0KICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9sZShhOiBieXRlcywgYjogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX2xlOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE0OS0xNTAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX2xlKGE6IGJ5dGVzLCBiOiBieXRlcyk6IGJvb2xlYW4gewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTUzCiAgICAvLyBjb25zdCBhVWludE4gPSBuZXcgVWludE48NTEyPihhQmlndWludCkKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpbnRjXzIgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMiAvLyA2NAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgZGlnIDEKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTU0CiAgICAvLyBjb25zdCBiVWludE4gPSBuZXcgVWludE48NTEyPihiQmlndWludCkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpbnRjXzIgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGZyYW1lX2RpZyAtMQogICAgdW5jb3ZlciAyCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE1NQogICAgLy8gcmV0dXJuIGFVaW50Ti5uYXRpdmUgPD0gYlVpbnROLm5hdGl2ZQogICAgYjw9CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYnl0ZV9ieXRlX2xlKGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfYnl0ZV9ieXRlX2xlOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE1Ny0xNTgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2J5dGVfYnl0ZV9sZShhOiBieXRlcywgYjogYnl0ZXMpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE2MQogICAgLy8gY29uc3QgYUJ5dGUgPSBuZXcgQnl0ZShhQmlndWludCkKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18wIC8vIDEKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTIKICAgIGRpZyAxCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE2MgogICAgLy8gY29uc3QgYkJ5dGUgPSBuZXcgQnl0ZShiQmlndWludCkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgZnJhbWVfZGlnIC0xCiAgICB1bmNvdmVyIDIKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTYzCiAgICAvLyByZXR1cm4gYUJ5dGUubmF0aXZlIDw9IGJCeXRlLm5hdGl2ZQogICAgc3dhcAogICAgYnRvaQogICAgc3dhcAogICAgYnRvaQogICAgPD0KICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV91aW50bl91aW50bl9ndChhOiBieXRlcywgYjogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X3VpbnRuX3VpbnRuX2d0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE2NS0xNjYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X3VpbnRuX3VpbnRuX2d0KGE6IGJ5dGVzLCBiOiBieXRlcyk6IGJvb2xlYW4gewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTY5CiAgICAvLyBjb25zdCBhVWludE4gPSBuZXcgVWludE48NjQ+KGFCaWd1aW50KQogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIGludGNfMSAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzEgLy8gOAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgZGlnIDEKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTcwCiAgICAvLyBjb25zdCBiVWludE4gPSBuZXcgVWludE48NjQ+KGJCaWd1aW50KQogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGludGNfMSAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBmcmFtZV9kaWcgLTEKICAgIHVuY292ZXIgMgogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxNzEKICAgIC8vIHJldHVybiBhVWludE4ubmF0aXZlID4gYlVpbnROLm5hdGl2ZQogICAgc3dhcAogICAgYnRvaQogICAgc3dhcAogICAgYnRvaQogICAgPgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2d0KGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfYmlndWludG5fdWludG5fZ3Q6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTczLTE3NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYmlndWludG5fdWludG5fZ3QoYTogYnl0ZXMsIGI6IGJ5dGVzKTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxNzcKICAgIC8vIGNvbnN0IGFVaW50TiA9IG5ldyBVaW50Tjw1MTI+KGFCaWd1aW50KQogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIGludGNfMiAvLyA2NAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18yIC8vIDY0CiAgICBiemVybwogICAgZnJhbWVfZGlnIC0yCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE3OAogICAgLy8gY29uc3QgYlVpbnROID0gbmV3IFVpbnROPDY0PihiQmlndWludCkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18xIC8vIDgKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTEKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTc5CiAgICAvLyByZXR1cm4gYVVpbnROLm5hdGl2ZSA+IEJpZ1VpbnQoYlVpbnROLm5hdGl2ZSkKICAgIGJ0b2kKICAgIGl0b2IKICAgIGI+CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfdWludG5fYmlndWludG5fZ3QoYTogYnl0ZXMsIGI6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV91aW50bl9iaWd1aW50bl9ndDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxODEtMTgyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV91aW50bl9iaWd1aW50bl9ndChhOiBieXRlcywgYjogYnl0ZXMpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE4NQogICAgLy8gY29uc3QgYVVpbnROID0gbmV3IFVpbnROPDY0PihhQmlndWludCkKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18xIC8vIDgKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTIKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTg2CiAgICAvLyBjb25zdCBiVWludE4gPSBuZXcgVWludE48NTEyPihiQmlndWludCkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpbnRjXzIgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMiAvLyA2NAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMQogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxODcKICAgIC8vIHJldHVybiBCaWdVaW50KGFVaW50Ti5uYXRpdmUpID4gYlVpbnROLm5hdGl2ZQogICAgc3dhcAogICAgYnRvaQogICAgaXRvYgogICAgYjwKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9ndChhOiBieXRlcywgYjogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX2d0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE4OS0xOTAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX2d0KGE6IGJ5dGVzLCBiOiBieXRlcyk6IGJvb2xlYW4gewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTkzCiAgICAvLyBjb25zdCBhVWludE4gPSBuZXcgVWludE48NTEyPihhQmlndWludCkKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpbnRjXzIgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMiAvLyA2NAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgZGlnIDEKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTk0CiAgICAvLyBjb25zdCBiVWludE4gPSBuZXcgVWludE48NTEyPihiQmlndWludCkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpbnRjXzIgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGZyYW1lX2RpZyAtMQogICAgdW5jb3ZlciAyCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE5NQogICAgLy8gcmV0dXJuIGFVaW50Ti5uYXRpdmUgPiBiVWludE4ubmF0aXZlCiAgICBiPgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2J5dGVfYnl0ZV9ndChhOiBieXRlcywgYjogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X2J5dGVfYnl0ZV9ndDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxOTctMTk4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9ieXRlX2J5dGVfZ3QoYTogYnl0ZXMsIGI6IGJ5dGVzKTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMDEKICAgIC8vIGNvbnN0IGFCeXRlID0gbmV3IEJ5dGUoYUJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMCAvLyAxCiAgICBiemVybwogICAgZnJhbWVfZGlnIC0yCiAgICBkaWcgMQogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMDIKICAgIC8vIGNvbnN0IGJCeXRlID0gbmV3IEJ5dGUoYkJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGZyYW1lX2RpZyAtMQogICAgdW5jb3ZlciAyCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIwMwogICAgLy8gcmV0dXJuIGFCeXRlLm5hdGl2ZSA+IGJCeXRlLm5hdGl2ZQogICAgc3dhcAogICAgYnRvaQogICAgc3dhcAogICAgYnRvaQogICAgPgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3VpbnRuX3VpbnRuX2dlKGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfdWludG5fdWludG5fZ2U6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjA1LTIwNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfdWludG5fdWludG5fZ2UoYTogYnl0ZXMsIGI6IGJ5dGVzKTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMDkKICAgIC8vIGNvbnN0IGFVaW50TiA9IG5ldyBVaW50Tjw2ND4oYUJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMSAvLyA4CiAgICBiemVybwogICAgZnJhbWVfZGlnIC0yCiAgICBkaWcgMQogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMTAKICAgIC8vIGNvbnN0IGJVaW50TiA9IG5ldyBVaW50Tjw2ND4oYkJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGZyYW1lX2RpZyAtMQogICAgdW5jb3ZlciAyCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIxMQogICAgLy8gcmV0dXJuIGFVaW50Ti5uYXRpdmUgPj0gYlVpbnROLm5hdGl2ZQogICAgc3dhcAogICAgYnRvaQogICAgc3dhcAogICAgYnRvaQogICAgPj0KICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9iaWd1aW50bl91aW50bl9nZShhOiBieXRlcywgYjogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2dlOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIxMy0yMTQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2dlKGE6IGJ5dGVzLCBiOiBieXRlcyk6IGJvb2xlYW4gewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjE3CiAgICAvLyBjb25zdCBhVWludE4gPSBuZXcgVWludE48NTEyPihhQmlndWludCkKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpbnRjXzIgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMiAvLyA2NAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMTgKICAgIC8vIGNvbnN0IGJVaW50TiA9IG5ldyBVaW50Tjw2ND4oYkJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMSAvLyA4CiAgICBiemVybwogICAgZnJhbWVfZGlnIC0xCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIxOQogICAgLy8gcmV0dXJuIGFVaW50Ti5uYXRpdmUgPj0gQmlnVWludChiVWludE4ubmF0aXZlKQogICAgYnRvaQogICAgaXRvYgogICAgYj49CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfdWludG5fYmlndWludG5fZ2UoYTogYnl0ZXMsIGI6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV91aW50bl9iaWd1aW50bl9nZToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMjEtMjIyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV91aW50bl9iaWd1aW50bl9nZShhOiBieXRlcywgYjogYnl0ZXMpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIyNQogICAgLy8gY29uc3QgYVVpbnROID0gbmV3IFVpbnROPDY0PihhQmlndWludCkKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18xIC8vIDgKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTIKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjI2CiAgICAvLyBjb25zdCBiVWludE4gPSBuZXcgVWludE48NTEyPihiQmlndWludCkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpbnRjXzIgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMiAvLyA2NAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMQogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMjcKICAgIC8vIHJldHVybiBCaWdVaW50KGFVaW50Ti5uYXRpdmUpID49IGJVaW50Ti5uYXRpdmUKICAgIHN3YXAKICAgIGJ0b2kKICAgIGl0b2IKICAgIGI8PQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX2dlKGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfYmlndWludG5fYmlndWludG5fZ2U6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjI5LTIzMAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYmlndWludG5fYmlndWludG5fZ2UoYTogYnl0ZXMsIGI6IGJ5dGVzKTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMzMKICAgIC8vIGNvbnN0IGFVaW50TiA9IG5ldyBVaW50Tjw1MTI+KGFCaWd1aW50KQogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIGludGNfMiAvLyA2NAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18yIC8vIDY0CiAgICBiemVybwogICAgZnJhbWVfZGlnIC0yCiAgICBkaWcgMQogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMzQKICAgIC8vIGNvbnN0IGJVaW50TiA9IG5ldyBVaW50Tjw1MTI+KGJCaWd1aW50KQogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGludGNfMiAvLyA2NAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgZnJhbWVfZGlnIC0xCiAgICB1bmNvdmVyIDIKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjM1CiAgICAvLyByZXR1cm4gYVVpbnROLm5hdGl2ZSA+PSBiVWludE4ubmF0aXZlCiAgICBiPj0KICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9ieXRlX2J5dGVfZ2UoYTogYnl0ZXMsIGI6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV9ieXRlX2J5dGVfZ2U6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjM3LTIzOAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYnl0ZV9ieXRlX2dlKGE6IGJ5dGVzLCBiOiBieXRlcyk6IGJvb2xlYW4gewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjQxCiAgICAvLyBjb25zdCBhQnl0ZSA9IG5ldyBCeXRlKGFCaWd1aW50KQogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIGludGNfMCAvLyAxCiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzAgLy8gMQogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgZGlnIDEKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjQyCiAgICAvLyBjb25zdCBiQnl0ZSA9IG5ldyBCeXRlKGJCaWd1aW50KQogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGludGNfMCAvLyAxCiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBmcmFtZV9kaWcgLTEKICAgIHVuY292ZXIgMgogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNDMKICAgIC8vIHJldHVybiBhQnl0ZS5uYXRpdmUgPj0gYkJ5dGUubmF0aXZlCiAgICBzd2FwCiAgICBidG9pCiAgICBzd2FwCiAgICBidG9pCiAgICA+PQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3VpbnRuX2luaXQoYTogYnl0ZXMpIC0+IGJ5dGVzOgp2ZXJpZnlfdWludG5faW5pdDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNDUtMjQ2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV91aW50bl9pbml0KGE6IGJ5dGVzKTogVWludE48MzI+IHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI0OAogICAgLy8gcmV0dXJuIG5ldyBVaW50TjwzMj4oYUJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgcHVzaGludCA0IC8vIDQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIHB1c2hpbnQgNCAvLyA0CiAgICBiemVybwogICAgZnJhbWVfZGlnIC0xCiAgICBifAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2JpZ3VpbnRuX2luaXQoYTogYnl0ZXMpIC0+IGJ5dGVzOgp2ZXJpZnlfYmlndWludG5faW5pdDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNTAtMjUxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9iaWd1aW50bl9pbml0KGE6IGJ5dGVzKTogVWludE48MjU2PiB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNTMKICAgIC8vIHJldHVybiBuZXcgVWludE48MjU2PihhQmlndWludCkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBwdXNoaW50IDMyIC8vIDMyCiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBwdXNoaW50IDMyIC8vIDMyCiAgICBiemVybwogICAgZnJhbWVfZGlnIC0xCiAgICBifAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2J5dGVfaW5pdChhOiBieXRlcykgLT4gYnl0ZXM6CnZlcmlmeV9ieXRlX2luaXQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjU1LTI1NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYnl0ZV9pbml0KGE6IGJ5dGVzKTogQnl0ZSB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNTgKICAgIC8vIHJldHVybiBuZXcgQnl0ZShhQmlndWludCkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18wIC8vIDEKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTEKICAgIGJ8CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfdWludG5fZnJvbV9sb2coYTogYnl0ZXMpIC0+IGJ5dGVzOgp2ZXJpZnlfdWludG5fZnJvbV9sb2c6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjcyLTI3MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfdWludG5fZnJvbV9sb2coYTogYnl0ZXMpOiBVaW50TjwzMj4gewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Mjc0CiAgICAvLyByZXR1cm4gaW50ZXJwcmV0QXNBcmM0PFVpbnROPDMyPj4oYSwgJ2xvZycpCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgNCAwCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXMgaGFzIHZhbGlkIHByZWZpeAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2JpZ3VpbnRuX2Zyb21fbG9nKGE6IGJ5dGVzKSAtPiBieXRlczoKdmVyaWZ5X2JpZ3VpbnRuX2Zyb21fbG9nOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI3Ni0yNzcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2JpZ3VpbnRuX2Zyb21fbG9nKGE6IGJ5dGVzKTogVWludE48MjU2PiB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNzgKICAgIC8vIHJldHVybiBpbnRlcnByZXRBc0FyYzQ8VWludE48MjU2Pj4oYSwgJ2xvZycpCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgNCAwCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXMgaGFzIHZhbGlkIHByZWZpeAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2J5dGVfZnJvbV9sb2coYTogYnl0ZXMpIC0+IGJ5dGVzOgp2ZXJpZnlfYnl0ZV9mcm9tX2xvZzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyODAtMjgxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9ieXRlX2Zyb21fbG9nKGE6IGJ5dGVzKTogQnl0ZSB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyODIKICAgIC8vIHJldHVybiBpbnRlcnByZXRBc0FyYzQ8Qnl0ZT4oYSwgJ2xvZycpCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgNCAwCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXMgaGFzIHZhbGlkIHByZWZpeAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3VmaXhlZG54bV9mcm9tX2xvZyhhOiBieXRlcykgLT4gYnl0ZXM6CnZlcmlmeV91Zml4ZWRueG1fZnJvbV9sb2c6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzAwLTMwMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfdWZpeGVkbnhtX2Zyb21fbG9nKGE6IGJ5dGVzKTogVUZpeGVkTnhNPDMyLCA4PiB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMDIKICAgIC8vIHJldHVybiBpbnRlcnByZXRBc0FyYzQ8VUZpeGVkTnhNPDMyLCA4Pj4oYSwgJ2xvZycpCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgNCAwCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXMgaGFzIHZhbGlkIHByZWZpeAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2JpZ3VmaXhlZG54bV9mcm9tX2xvZyhhOiBieXRlcykgLT4gYnl0ZXM6CnZlcmlmeV9iaWd1Zml4ZWRueG1fZnJvbV9sb2c6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzA0LTMwNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYmlndWZpeGVkbnhtX2Zyb21fbG9nKGE6IGJ5dGVzKTogVUZpeGVkTnhNPDI1NiwgMTY+IHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMwNgogICAgLy8gcmV0dXJuIGludGVycHJldEFzQXJjNDxVRml4ZWROeE08MjU2LCAxNj4+KGEsICdsb2cnKQogICAgZnJhbWVfZGlnIC0xCiAgICBleHRyYWN0IDQgMAogICAgZnJhbWVfZGlnIC0xCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEJ5dGVzIGhhcyB2YWxpZCBwcmVmaXgKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9zdHJpbmdfaW5pdChhOiBieXRlcykgLT4gYnl0ZXM6CnZlcmlmeV9zdHJpbmdfaW5pdDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMDgtMzA5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9zdHJpbmdfaW5pdChhOiBzdHJpbmcpOiBTdHIgewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzEwCiAgICAvLyBjb25zdCByZXN1bHQgPSBuZXcgU3RyKGBIZWxsbywgJHthfWApCiAgICBwdXNoYnl0ZXMgIkhlbGxvLCAiCiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMTEKICAgIC8vIHJldHVybiByZXN1bHQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9zdHJpbmdfYWRkKGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gYnl0ZXM6CnZlcmlmeV9zdHJpbmdfYWRkOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMxMy0zMTQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X3N0cmluZ19hZGQoYTogU3RyLCBiOiBTdHIpOiBTdHIgewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzE1CiAgICAvLyBjb25zdCByZXN1bHQgPSBhLm5hdGl2ZS5jb25jYXQoYi5uYXRpdmUpCiAgICBmcmFtZV9kaWcgLTIKICAgIGV4dHJhY3QgMiAwCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgMiAwCiAgICBjb25jYXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMTYKICAgIC8vIHJldHVybiBuZXcgU3RyKHJlc3VsdCkKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfc3RyaW5nX2VxKGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfc3RyaW5nX2VxOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMxOC0zMTkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X3N0cmluZ19lcShhOiBTdHIsIGI6IFN0cik6IGJvb2xlYW4gewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzIwCiAgICAvLyByZXR1cm4gYSA9PT0gYgogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgID09CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfc3RyaW5nX2J5dGVzKGE6IGJ5dGVzKSAtPiBieXRlczoKdmVyaWZ5X3N0cmluZ19ieXRlczoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMjItMzIzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9zdHJpbmdfYnl0ZXMoYTogc3RyaW5nKTogYnl0ZXMgewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzI0CiAgICAvLyBjb25zdCByZXN1bHQgPSBuZXcgU3RyKGEpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGZyYW1lX2RpZyAtMQogICAgY29uY2F0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzI1CiAgICAvLyByZXR1cm4gcmVzdWx0LmJ5dGVzCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfc3RyaW5nX2Zyb21fbG9nKGE6IGJ5dGVzKSAtPiBieXRlczoKdmVyaWZ5X3N0cmluZ19mcm9tX2xvZzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMzEtMzMyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9zdHJpbmdfZnJvbV9sb2coYTogYnl0ZXMpOiBTdHIgewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzMzCiAgICAvLyByZXR1cm4gaW50ZXJwcmV0QXNBcmM0PFN0cj4oYSwgJ2xvZycpCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgNCAwCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXMgaGFzIHZhbGlkIHByZWZpeAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2Jvb2xfZnJvbV9sb2coYTogYnl0ZXMpIC0+IGJ5dGVzOgp2ZXJpZnlfYm9vbF9mcm9tX2xvZzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozNDMtMzQ0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9ib29sX2Zyb21fbG9nKGE6IGJ5dGVzKTogQm9vbCB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozNDUKICAgIC8vIHJldHVybiBpbnRlcnByZXRBc0FyYzQ8Qm9vbD4oYSwgJ2xvZycpCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgNCAwCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXMgaGFzIHZhbGlkIHByZWZpeAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2VtaXQoYTogYnl0ZXMsIGI6IGJ5dGVzLCBjOiBieXRlcywgZDogYnl0ZXMsIGU6IGJ5dGVzLCBmOiBieXRlcywgZzogYnl0ZXMsIGg6IGJ5dGVzLCBtOiBieXRlcywgbjogYnl0ZXMsIG86IGJ5dGVzLCBwOiBieXRlcywgcTogYnl0ZXMsIHI6IGJ5dGVzLCBzOiBieXRlcywgdDogYnl0ZXMpIC0+IHZvaWQ6CnZlcmlmeV9lbWl0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM0OS0zNjcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2VtaXQoCiAgICAvLyAgIGE6IGFyYzQuU3RyLAogICAgLy8gICBiOiBhcmM0LlVpbnROPDUxMj4sCiAgICAvLyAgIGM6IGFyYzQuVWludE42NCwKICAgIC8vICAgZDogYXJjNC5EeW5hbWljQnl0ZXMsCiAgICAvLyAgIGU6IGFyYzQuVWludE42NCwKICAgIC8vICAgZjogYXJjNC5Cb29sLAogICAgLy8gICBnOiBhcmM0LkR5bmFtaWNCeXRlcywKICAgIC8vICAgaDogYXJjNC5TdHIsCiAgICAvLyAgIG06IGFyYzQuVWludE48NjQ+LAogICAgLy8gICBuOiBhcmM0LlVpbnROPDI1Nj4sCiAgICAvLyAgIG86IGFyYzQuVUZpeGVkTnhNPDMyLCA4PiwKICAgIC8vICAgcDogYXJjNC5VRml4ZWROeE08MjU2LCAxNj4sCiAgICAvLyAgIHE6IGFyYzQuQm9vbCwKICAgIC8vICAgcjogYnl0ZXMsCiAgICAvLyAgIHM6IGJ5dGVzLAogICAgLy8gICB0OiBieXRlcywKICAgIC8vICk6IHZvaWQgewogICAgcHJvdG8gMTYgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM3MgogICAgLy8gZW1pdChuZXcgU3dhcHBlZEFyYzQoeyBtLCBuLCBvLCBwLCBxLCByOiBhcmM0X3IsIHM6IGFyYzRfcywgdDogYXJjNF90IH0pKQogICAgZnJhbWVfZGlnIC04CiAgICBmcmFtZV9kaWcgLTcKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC02CiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtNQogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTQKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0zCiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAweDAwNTQKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIHB1c2hpbnQgODQgLy8gODQKICAgIGRpZyAxCiAgICArCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgdW5jb3ZlciAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4NjZiYjAzMzMgLy8gbWV0aG9kICJTd2FwcGVkQXJjNCh1aW50NjQsdWludDI1Nix1Zml4ZWQzMng4LHVmaXhlZDI1NngxNixib29sLHVpbnQ4WzNdLHVpbnQxNltdLCh1aW50MzIsdWludDY0LHN0cmluZykpIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozNzMKICAgIC8vIGVtaXQoJ1N3YXBwZWQnLCBhLCBiLCBjLCBkLCBlLCBmLCBnLCBoLCBtLCBuLCBvLCBwLCBxLCBhcmM0X3IuY29weSgpLCBhcmM0X3MuY29weSgpLCBhcmM0X3QpCiAgICBmcmFtZV9kaWcgLTE2CiAgICBsZW4KICAgIHB1c2hpbnQgMTczIC8vIDE3MwogICAgKwogICAgcHVzaGJ5dGVzIDB4MDBhZAogICAgZnJhbWVfZGlnIC0xNQogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTE0CiAgICBjb25jYXQKICAgIGRpZyAxCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTEzCiAgICBsZW4KICAgIHVuY292ZXIgMgogICAgKwogICAgc3dhcAogICAgZnJhbWVfZGlnIC0xMgogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTExCiAgICBjb25jYXQKICAgIGRpZyAxCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTEwCiAgICBsZW4KICAgIHVuY292ZXIgMgogICAgKwogICAgZHVwCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgdW5jb3ZlciAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtOQogICAgbGVuCiAgICB1bmNvdmVyIDIKICAgICsKICAgIHN3YXAKICAgIGZyYW1lX2RpZyAtOAogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTcKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC02CiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtNQogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTQKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0zCiAgICBjb25jYXQKICAgIGRpZyAxCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgY29uY2F0CiAgICBzd2FwCiAgICB1bmNvdmVyIDIKICAgICsKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtMTYKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0xMwogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTEwCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtOQogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTIKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAweGVjMzMxOWJiIC8vIG1ldGhvZCAiU3dhcHBlZChzdHJpbmcsdWludDUxMix1aW50NjQsYnl0ZVtdLHVpbnQ2NCxib29sLGJ5dGVbXSxzdHJpbmcsdWludDY0LHVpbnQyNTYsdWZpeGVkMzJ4OCx1Zml4ZWQyNTZ4MTYsYm9vbCx1aW50OFszXSx1aW50MTZbXSwodWludDMyLHVpbnQ2NCxzdHJpbmcpKSIKICAgIGRpZyAxCiAgICBjb25jYXQKICAgIGxvZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM3NC0zOTIKICAgIC8vIGVtaXQoCiAgICAvLyAgICdTd2FwcGVkKHN0cmluZyx1aW50NTEyLHVpbnQ2NCxieXRlW10sdWludDY0LGJvb2wsYnl0ZVtdLHN0cmluZyx1aW50NjQsdWludDI1Nix1Zml4ZWQzMng4LHVmaXhlZDI1NngxNixib29sLHVpbnQ4WzNdLHVpbnQxNltdLCh1aW50MzIsdWludDY0LHN0cmluZykpJywKICAgIC8vICAgYSwKICAgIC8vICAgYiwKICAgIC8vICAgYywKICAgIC8vICAgZCwKICAgIC8vICAgZSwKICAgIC8vICAgZiwKICAgIC8vICAgZywKICAgIC8vICAgaCwKICAgIC8vICAgbSwKICAgIC8vICAgbiwKICAgIC8vICAgbywKICAgIC8vICAgcCwKICAgIC8vICAgcSwKICAgIC8vICAgYXJjNF9yLmNvcHkoKSwKICAgIC8vICAgYXJjNF9zLmNvcHkoKSwKICAgIC8vICAgYXJjNF90LAogICAgLy8gKQogICAgcHVzaGJ5dGVzIDB4ZWMzMzE5YmIgLy8gbWV0aG9kICJTd2FwcGVkKHN0cmluZyx1aW50NTEyLHVpbnQ2NCxieXRlW10sdWludDY0LGJvb2wsYnl0ZVtdLHN0cmluZyx1aW50NjQsdWludDI1Nix1Zml4ZWQzMng4LHVmaXhlZDI1NngxNixib29sLHVpbnQ4WzNdLHVpbnQxNltdLCh1aW50MzIsdWludDY0LHN0cmluZykpIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIHJldHN1Ygo=", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + }, + "state": { + "global": { + "num_byte_slices": 0, + "num_uints": 0 + }, + "local": { + "num_byte_slices": 0, + "num_uints": 0 + } + }, + "schema": { + "global": { + "declared": {}, + "reserved": {} + }, + "local": { + "declared": {}, + "reserved": {} + } + }, + "contract": { + "name": "Arc4PrimitiveOpsContract", + "methods": [ + { + "name": "verify_uintn_uintn_eq", + "args": [ + { + "type": "byte[]", + "name": "a" + }, + { + "type": "byte[]", + "name": "b" + } + ], + "readonly": false, + "returns": { + "type": "bool" + } + }, + { + "name": "verify_biguintn_uintn_eq", + "args": [ + { + "type": "byte[]", + "name": "a" + }, + { + "type": "byte[]", + "name": "b" + } + ], + "readonly": false, + "returns": { + "type": "bool" + } + }, + { + "name": "verify_uintn_biguintn_eq", + "args": [ + { + "type": "byte[]", + "name": "a" + }, + { + "type": "byte[]", + "name": "b" + } + ], + "readonly": false, + "returns": { + "type": "bool" + } + }, + { + "name": "verify_biguintn_biguintn_eq", + "args": [ + { + "type": "byte[]", + "name": "a" + }, + { + "type": "byte[]", + "name": "b" + } + ], + "readonly": false, + "returns": { + "type": "bool" + } + }, + { + "name": "verify_byte_byte_eq", + "args": [ + { + "type": "byte[]", + "name": "a" + }, + { + "type": "byte[]", + "name": "b" + } + ], + "readonly": false, + "returns": { + "type": "bool" + } + }, + { + "name": "verify_uintn_uintn_ne", + "args": [ + { + "type": "byte[]", + "name": "a" + }, + { + "type": "byte[]", + "name": "b" + } + ], + "readonly": false, + "returns": { + "type": "bool" + } + }, + { + "name": "verify_biguintn_uintn_ne", + "args": [ + { + "type": "byte[]", + "name": "a" + }, + { + "type": "byte[]", + "name": "b" + } + ], + "readonly": false, + "returns": { + "type": "bool" + } + }, + { + "name": "verify_uintn_biguintn_ne", + "args": [ + { + "type": "byte[]", + "name": "a" + }, + { + "type": "byte[]", + "name": "b" + } + ], + "readonly": false, + "returns": { + "type": "bool" + } + }, + { + "name": "verify_biguintn_biguintn_ne", + "args": [ + { + "type": "byte[]", + "name": "a" + }, + { + "type": "byte[]", + "name": "b" + } + ], + "readonly": false, + "returns": { + "type": "bool" + } + }, + { + "name": "verify_byte_byte_ne", + "args": [ + { + "type": "byte[]", + "name": "a" + }, + { + "type": "byte[]", + "name": "b" + } + ], + "readonly": false, + "returns": { + "type": "bool" + } + }, + { + "name": "verify_uintn_uintn_lt", + "args": [ + { + "type": "byte[]", + "name": "a" + }, + { + "type": "byte[]", + "name": "b" + } + ], + "readonly": false, + "returns": { + "type": "bool" + } + }, + { + "name": "verify_biguintn_uintn_lt", + "args": [ + { + "type": "byte[]", + "name": "a" + }, + { + "type": "byte[]", + "name": "b" + } + ], + "readonly": false, + "returns": { + "type": "bool" + } + }, + { + "name": "verify_uintn_biguintn_lt", + "args": [ + { + "type": "byte[]", + "name": "a" + }, + { + "type": "byte[]", + "name": "b" + } + ], + "readonly": false, + "returns": { + "type": "bool" + } + }, + { + "name": "verify_biguintn_biguintn_lt", + "args": [ + { + "type": "byte[]", + "name": "a" + }, + { + "type": "byte[]", + "name": "b" + } + ], + "readonly": false, + "returns": { + "type": "bool" + } + }, + { + "name": "verify_byte_byte_lt", + "args": [ + { + "type": "byte[]", + "name": "a" + }, + { + "type": "byte[]", + "name": "b" + } + ], + "readonly": false, + "returns": { + "type": "bool" + } + }, + { + "name": "verify_uintn_uintn_le", + "args": [ + { + "type": "byte[]", + "name": "a" + }, + { + "type": "byte[]", + "name": "b" + } + ], + "readonly": false, + "returns": { + "type": "bool" + } + }, + { + "name": "verify_biguintn_uintn_le", + "args": [ + { + "type": "byte[]", + "name": "a" + }, + { + "type": "byte[]", + "name": "b" + } + ], + "readonly": false, + "returns": { + "type": "bool" + } + }, + { + "name": "verify_uintn_biguintn_le", + "args": [ + { + "type": "byte[]", + "name": "a" + }, + { + "type": "byte[]", + "name": "b" + } + ], + "readonly": false, + "returns": { + "type": "bool" + } + }, + { + "name": "verify_biguintn_biguintn_le", + "args": [ + { + "type": "byte[]", + "name": "a" + }, + { + "type": "byte[]", + "name": "b" + } + ], + "readonly": false, + "returns": { + "type": "bool" + } + }, + { + "name": "verify_byte_byte_le", + "args": [ + { + "type": "byte[]", + "name": "a" + }, + { + "type": "byte[]", + "name": "b" + } + ], + "readonly": false, + "returns": { + "type": "bool" + } + }, + { + "name": "verify_uintn_uintn_gt", + "args": [ + { + "type": "byte[]", + "name": "a" + }, + { + "type": "byte[]", + "name": "b" + } + ], + "readonly": false, + "returns": { + "type": "bool" + } + }, + { + "name": "verify_biguintn_uintn_gt", + "args": [ + { + "type": "byte[]", + "name": "a" + }, + { + "type": "byte[]", + "name": "b" + } + ], + "readonly": false, + "returns": { + "type": "bool" + } + }, + { + "name": "verify_uintn_biguintn_gt", + "args": [ + { + "type": "byte[]", + "name": "a" + }, + { + "type": "byte[]", + "name": "b" + } + ], + "readonly": false, + "returns": { + "type": "bool" + } + }, + { + "name": "verify_biguintn_biguintn_gt", + "args": [ + { + "type": "byte[]", + "name": "a" + }, + { + "type": "byte[]", + "name": "b" + } + ], + "readonly": false, + "returns": { + "type": "bool" + } + }, + { + "name": "verify_byte_byte_gt", + "args": [ + { + "type": "byte[]", + "name": "a" + }, + { + "type": "byte[]", + "name": "b" + } + ], + "readonly": false, + "returns": { + "type": "bool" + } + }, + { + "name": "verify_uintn_uintn_ge", + "args": [ + { + "type": "byte[]", + "name": "a" + }, + { + "type": "byte[]", + "name": "b" + } + ], + "readonly": false, + "returns": { + "type": "bool" + } + }, + { + "name": "verify_biguintn_uintn_ge", + "args": [ + { + "type": "byte[]", + "name": "a" + }, + { + "type": "byte[]", + "name": "b" + } + ], + "readonly": false, + "returns": { + "type": "bool" + } + }, + { + "name": "verify_uintn_biguintn_ge", + "args": [ + { + "type": "byte[]", + "name": "a" + }, + { + "type": "byte[]", + "name": "b" + } + ], + "readonly": false, + "returns": { + "type": "bool" + } + }, + { + "name": "verify_biguintn_biguintn_ge", + "args": [ + { + "type": "byte[]", + "name": "a" + }, + { + "type": "byte[]", + "name": "b" + } + ], + "readonly": false, + "returns": { + "type": "bool" + } + }, + { + "name": "verify_byte_byte_ge", + "args": [ + { + "type": "byte[]", + "name": "a" + }, + { + "type": "byte[]", + "name": "b" + } + ], + "readonly": false, + "returns": { + "type": "bool" + } + }, + { + "name": "verify_uintn_init", + "args": [ + { + "type": "byte[]", + "name": "a" + } + ], + "readonly": false, + "returns": { + "type": "uint32" + } + }, + { + "name": "verify_biguintn_init", + "args": [ + { + "type": "byte[]", + "name": "a" + } + ], + "readonly": false, + "returns": { + "type": "uint256" + } + }, + { + "name": "verify_byte_init", + "args": [ + { + "type": "byte[]", + "name": "a" + } + ], + "readonly": false, + "returns": { + "type": "byte" + } + }, + { + "name": "verify_uintn_from_bytes", + "args": [ + { + "type": "byte[]", + "name": "a" + } + ], + "readonly": false, + "returns": { + "type": "uint32" + } + }, + { + "name": "verify_biguintn_from_bytes", + "args": [ + { + "type": "byte[]", + "name": "a" + } + ], + "readonly": false, + "returns": { + "type": "uint256" + } + }, + { + "name": "verify_byte_from_bytes", + "args": [ + { + "type": "byte[]", + "name": "a" + } + ], + "readonly": false, + "returns": { + "type": "byte" + } + }, + { + "name": "verify_uintn_from_log", + "args": [ + { + "type": "byte[]", + "name": "a" + } + ], + "readonly": false, + "returns": { + "type": "uint32" + } + }, + { + "name": "verify_biguintn_from_log", + "args": [ + { + "type": "byte[]", + "name": "a" + } + ], + "readonly": false, + "returns": { + "type": "uint256" + } + }, + { + "name": "verify_byte_from_log", + "args": [ + { + "type": "byte[]", + "name": "a" + } + ], + "readonly": false, + "returns": { + "type": "byte" + } + }, + { + "name": "verify_ufixednxm_bytes", + "args": [ + { + "type": "ufixed32x8", + "name": "a" + } + ], + "readonly": false, + "returns": { + "type": "byte[]" + } + }, + { + "name": "verify_bigufixednxm_bytes", + "args": [ + { + "type": "ufixed256x16", + "name": "a" + } + ], + "readonly": false, + "returns": { + "type": "byte[]" + } + }, + { + "name": "verify_ufixednxm_from_bytes", + "args": [ + { + "type": "byte[]", + "name": "a" + } + ], + "readonly": false, + "returns": { + "type": "ufixed32x8" + } + }, + { + "name": "verify_bigufixednxm_from_bytes", + "args": [ + { + "type": "byte[]", + "name": "a" + } + ], + "readonly": false, + "returns": { + "type": "ufixed256x16" + } + }, + { + "name": "verify_ufixednxm_from_log", + "args": [ + { + "type": "byte[]", + "name": "a" + } + ], + "readonly": false, + "returns": { + "type": "ufixed32x8" + } + }, + { + "name": "verify_bigufixednxm_from_log", + "args": [ + { + "type": "byte[]", + "name": "a" + } + ], + "readonly": false, + "returns": { + "type": "ufixed256x16" + } + }, + { + "name": "verify_string_init", + "args": [ + { + "type": "string", + "name": "a" + } + ], + "readonly": false, + "returns": { + "type": "string" + } + }, + { + "name": "verify_string_add", + "args": [ + { + "type": "string", + "name": "a" + }, + { + "type": "string", + "name": "b" + } + ], + "readonly": false, + "returns": { + "type": "string" + } + }, + { + "name": "verify_string_eq", + "args": [ + { + "type": "string", + "name": "a" + }, + { + "type": "string", + "name": "b" + } + ], + "readonly": false, + "returns": { + "type": "bool" + } + }, + { + "name": "verify_string_bytes", + "args": [ + { + "type": "string", + "name": "a" + } + ], + "readonly": false, + "returns": { + "type": "byte[]" + } + }, + { + "name": "verify_string_from_bytes", + "args": [ + { + "type": "byte[]", + "name": "a" + } + ], + "readonly": false, + "returns": { + "type": "string" + } + }, + { + "name": "verify_string_from_log", + "args": [ + { + "type": "byte[]", + "name": "a" + } + ], + "readonly": false, + "returns": { + "type": "string" + } + }, + { + "name": "verify_bool_bytes", + "args": [ + { + "type": "bool", + "name": "a" + } + ], + "readonly": false, + "returns": { + "type": "byte[]" + } + }, + { + "name": "verify_bool_from_bytes", + "args": [ + { + "type": "byte[]", + "name": "a" + } + ], + "readonly": false, + "returns": { + "type": "bool" + } + }, + { + "name": "verify_bool_from_log", + "args": [ + { + "type": "byte[]", + "name": "a" + } + ], + "readonly": false, + "returns": { + "type": "bool" + } + }, + { + "name": "verify_emit", + "args": [ + { + "type": "string", + "name": "a" + }, + { + "type": "uint512", + "name": "b" + }, + { + "type": "uint64", + "name": "c" + }, + { + "type": "byte[]", + "name": "d" + }, + { + "type": "uint64", + "name": "e" + }, + { + "type": "bool", + "name": "f" + }, + { + "type": "byte[]", + "name": "g" + }, + { + "type": "string", + "name": "h" + }, + { + "type": "uint64", + "name": "m" + }, + { + "type": "uint256", + "name": "n" + }, + { + "type": "ufixed32x8", + "name": "o" + }, + { + "type": "ufixed256x16", + "name": "p" + }, + { + "type": "bool", + "name": "q" + }, + { + "type": "byte[]", + "name": "r" + }, + { + "type": "byte[]", + "name": "s" + }, + { + "type": "byte[]", + "name": "t" + } + ], + "readonly": false, + "returns": { + "type": "void" + } + } + ], + "networks": {} + }, + "bare_call_config": { + "no_op": "CREATE" + } +} diff --git a/tests/artifacts/arc4-primitive-ops/data/Arc4PrimitiveOpsContract.arc56.json b/tests/artifacts/arc4-primitive-ops/data/Arc4PrimitiveOpsContract.arc56.json index ff6a4bf..392c060 100644 --- a/tests/artifacts/arc4-primitive-ops/data/Arc4PrimitiveOpsContract.arc56.json +++ b/tests/artifacts/arc4-primitive-ops/data/Arc4PrimitiveOpsContract.arc56.json @@ -1263,6 +1263,263 @@ "readonly": false, "events": [], "recommendations": {} + }, + { + "name": "verify_emit", + "args": [ + { + "type": "string", + "name": "a" + }, + { + "type": "uint512", + "name": "b" + }, + { + "type": "uint64", + "name": "c" + }, + { + "type": "byte[]", + "name": "d" + }, + { + "type": "uint64", + "name": "e" + }, + { + "type": "bool", + "name": "f" + }, + { + "type": "byte[]", + "name": "g" + }, + { + "type": "string", + "name": "h" + }, + { + "type": "uint64", + "name": "m" + }, + { + "type": "uint256", + "name": "n" + }, + { + "type": "ufixed32x8", + "name": "o" + }, + { + "type": "ufixed256x16", + "name": "p" + }, + { + "type": "bool", + "name": "q" + }, + { + "type": "byte[]", + "name": "r" + }, + { + "type": "byte[]", + "name": "s" + }, + { + "type": "byte[]", + "name": "t" + } + ], + "returns": { + "type": "void" + }, + "actions": { + "create": [], + "call": [ + "NoOp" + ] + }, + "readonly": false, + "events": [ + { + "name": "SwappedArc4", + "args": [ + { + "type": "uint64", + "name": "m" + }, + { + "type": "uint256", + "name": "n" + }, + { + "type": "ufixed32x8", + "name": "o" + }, + { + "type": "ufixed256x16", + "name": "p" + }, + { + "type": "bool", + "name": "q" + }, + { + "type": "uint8[3]", + "name": "r" + }, + { + "type": "uint16[]", + "name": "s" + }, + { + "type": "(uint32,uint64,string)", + "name": "t" + } + ] + }, + { + "name": "Swapped", + "args": [ + { + "type": "string", + "name": "0" + }, + { + "type": "uint512", + "name": "1" + }, + { + "type": "uint64", + "name": "2" + }, + { + "type": "byte[]", + "name": "3" + }, + { + "type": "uint64", + "name": "4" + }, + { + "type": "bool", + "name": "5" + }, + { + "type": "byte[]", + "name": "6" + }, + { + "type": "string", + "name": "7" + }, + { + "type": "uint64", + "name": "8" + }, + { + "type": "uint256", + "name": "9" + }, + { + "type": "ufixed32x8", + "name": "10" + }, + { + "type": "ufixed256x16", + "name": "11" + }, + { + "type": "bool", + "name": "12" + }, + { + "type": "uint8[3]", + "name": "13" + }, + { + "type": "uint16[]", + "name": "14" + }, + { + "type": "(uint32,uint64,string)", + "name": "15" + } + ] + }, + { + "name": "", + "args": [ + { + "type": "string", + "name": "0" + }, + { + "type": "uint512", + "name": "1" + }, + { + "type": "uint64", + "name": "2" + }, + { + "type": "byte[]", + "name": "3" + }, + { + "type": "uint64", + "name": "4" + }, + { + "type": "bool", + "name": "5" + }, + { + "type": "byte[]", + "name": "6" + }, + { + "type": "string", + "name": "7" + }, + { + "type": "uint64", + "name": "8" + }, + { + "type": "uint256", + "name": "9" + }, + { + "type": "ufixed32x8", + "name": "10" + }, + { + "type": "ufixed256x16", + "name": "11" + }, + { + "type": "bool", + "name": "12" + }, + { + "type": "uint8[3]", + "name": "13" + }, + { + "type": "uint16[]", + "name": "14" + }, + { + "type": "(uint32,uint64,string)", + "name": "15" + } + ] + } + ], + "recommendations": {} } ], "arcs": [ @@ -1303,205 +1560,207 @@ "sourceInfo": [ { "pc": [ - 2956, - 2973, - 2990, - 3031, - 3048, - 3141, - 3170 + 2992, + 3009, + 3026, + 3043, + 3060, + 3147, + 3164 ], "errorMessage": "Bytes has valid prefix" }, { "pc": [ 418, - 451, - 484, - 517, - 550, - 583, - 616, - 649, - 682, - 715, - 748, - 781, - 814, - 847, - 880, - 913, - 946, - 979, - 1012, - 1045, - 1078, - 1111, - 1144, - 1177, - 1210, - 1243, - 1276, - 1309, - 1342, - 1375, - 1408, - 1430, - 1452, - 1474, - 1496, - 1518, - 1540, - 1562, - 1584, - 1606, - 1633, - 1660, - 1682, - 1704, - 1726, - 1748, - 1770, - 1792, - 1819, - 1849, - 1871, - 1893, - 1920, - 1942 + 504, + 526, + 545, + 569, + 591, + 610, + 640, + 667, + 689, + 711, + 733, + 755, + 774, + 793, + 817, + 841, + 863, + 885, + 907, + 926, + 945, + 964, + 986, + 1008, + 1030, + 1063, + 1096, + 1129, + 1162, + 1195, + 1228, + 1261, + 1294, + 1327, + 1360, + 1393, + 1426, + 1459, + 1492, + 1525, + 1558, + 1591, + 1624, + 1657, + 1690, + 1723, + 1756, + 1789, + 1822, + 1855, + 1888, + 1921, + 1954, + 1987 ], "errorMessage": "OnCompletion is not NoOp" }, { "pc": [ - 1969 + 2025 ], "errorMessage": "can only call when creating" }, { "pc": [ 421, - 454, - 487, - 520, - 553, - 586, - 619, - 652, - 685, - 718, - 751, - 784, - 817, - 850, - 883, - 916, - 949, - 982, - 1015, - 1048, - 1081, - 1114, - 1147, - 1180, - 1213, - 1246, - 1279, - 1312, - 1345, - 1378, - 1411, - 1433, - 1455, - 1477, - 1499, - 1521, - 1543, - 1565, - 1587, - 1609, - 1636, - 1663, - 1685, - 1707, - 1729, - 1751, - 1773, - 1795, - 1822, - 1852, - 1874, - 1896, - 1923, - 1945 + 507, + 529, + 548, + 572, + 594, + 613, + 643, + 670, + 692, + 714, + 736, + 758, + 777, + 796, + 820, + 844, + 866, + 888, + 910, + 929, + 948, + 967, + 989, + 1011, + 1033, + 1066, + 1099, + 1132, + 1165, + 1198, + 1231, + 1264, + 1297, + 1330, + 1363, + 1396, + 1429, + 1462, + 1495, + 1528, + 1561, + 1594, + 1627, + 1660, + 1693, + 1726, + 1759, + 1792, + 1825, + 1858, + 1891, + 1924, + 1957, + 1990 ], "errorMessage": "can only call when not creating" }, { "pc": [ - 1982, - 1995, - 2011, - 2022, - 2038, + 2036, 2049, 2065, - 2078, - 2094, - 2107, - 2123, - 2136, - 2152, - 2163, - 2180, - 2191, - 2208, - 2221, - 2237, - 2250, - 2266, - 2279, - 2299, - 2310, - 2328, - 2339, - 2358, - 2371, - 2387, - 2400, - 2420, - 2433, - 2453, - 2464, - 2482, - 2493, - 2512, - 2525, - 2541, - 2554, - 2574, - 2587, - 2607, - 2618, - 2636, - 2647, - 2666, - 2679, - 2695, - 2708, - 2728, - 2741, - 2761, - 2772, - 2790, - 2801, - 2820, - 2833, - 2849, - 2862, - 2883, - 2900, - 2916 + 2076, + 2092, + 2103, + 2119, + 2132, + 2148, + 2161, + 2177, + 2190, + 2206, + 2217, + 2234, + 2245, + 2262, + 2275, + 2291, + 2304, + 2320, + 2333, + 2353, + 2364, + 2382, + 2393, + 2412, + 2425, + 2441, + 2454, + 2474, + 2487, + 2507, + 2518, + 2536, + 2547, + 2566, + 2579, + 2595, + 2608, + 2628, + 2641, + 2661, + 2672, + 2690, + 2701, + 2720, + 2733, + 2749, + 2762, + 2782, + 2795, + 2815, + 2826, + 2844, + 2855, + 2874, + 2887, + 2903, + 2916, + 2937, + 2954, + 2970 ], "errorMessage": "overflow" } @@ -1514,9 +1773,197 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC5hcHByb3ZhbFByb2dyYW06CiAgICBpbnRjYmxvY2sgMSA4IDY0IDAKICAgIGJ5dGVjYmxvY2sgMHgxNTFmN2M3NSAweDAwCiAgICBjYWxsc3ViIF9fcHV5YV9hcmM0X3JvdXRlcl9fCiAgICByZXR1cm4KCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC5fX3B1eWFfYXJjNF9yb3V0ZXJfXygpIC0+IHVpbnQ2NDoKX19wdXlhX2FyYzRfcm91dGVyX186CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHByb3RvIDAgMQogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IF9fcHV5YV9hcmM0X3JvdXRlcl9fX2JhcmVfcm91dGluZ0A1OAogICAgcHVzaGJ5dGVzcyAweDk2ZjE0MTE2IDB4ZWQ2NjYwOTYgMHgyY2EwMzUyYiAweDg1OTA3ZDQwIDB4NGViMmFmNGEgMHgyY2JlYzQ1YiAweDA3NjY2ZmQ5IDB4MzcwYmFiZDMgMHgyYjZiM2VmMCAweDI3ZTIxYTk4IDB4MzM5ZGE5N2MgMHg3ODk4ZWQ5NyAweDFmMTMwY2VjIDB4Yzc0ODY2NGUgMHhhMmJhYzE0YiAweDdhNDYwY2IxIDB4ZGNhYjFmMDEgMHg5N2Q5MDY0ZCAweGNlMDZjMmEwIDB4N2MxMWUzNzUgMHhkY2RiY2VlMCAweDc3YTRiNjhkIDB4NGY1NDA2MjYgMHgwOTVhZWQ0MSAweGRmNzhjZGM2IDB4ZTNiN2U5MTggMHg1NTMzNzAwOCAweDliYjFjZDY2IDB4ODE0ODRkOWQgMHg3OWU5Y2IwMyAweDlhMDNkZjEwIDB4ZDNmMGU0NGIgMHg2NzNkYjJiZCAweDk4MmRiMjMzIDB4YWZmYmRmMGUgMHg4ZTRhMzBmNyAweDI4OGFmNzZlIDB4OGJkODRhMDQgMHhmY2Q1NWUxZiAweDBmMTU3NGZlIDB4YjJjYjEzYmUgMHhkMDU5ZWVhNyAweDRjYzRjMTU3IDB4M2QxN2FjNmUgMHhmN2YzZDVmYyAweGY4YzhmOGQ1IDB4NDNmNzE2MmEgMHg0MmUwOTA3NSAweGQ5NTZmNTc1IDB4NmMwMTYwZGYgMHhhODkwMTUwYiAweDBiMmY0YzNmIDB4OWRiOWQzMjcgMHhlNGQ5NTBhMSAvLyBtZXRob2QgInZlcmlmeV91aW50bl91aW50bl9lcShieXRlW10sYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV9iaWd1aW50bl91aW50bl9lcShieXRlW10sYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV91aW50bl9iaWd1aW50bl9lcShieXRlW10sYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9lcShieXRlW10sYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV9ieXRlX2J5dGVfZXEoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfdWludG5fdWludG5fbmUoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfYmlndWludG5fdWludG5fbmUoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfdWludG5fYmlndWludG5fbmUoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfYmlndWludG5fYmlndWludG5fbmUoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfYnl0ZV9ieXRlX25lKGJ5dGVbXSxieXRlW10pYm9vbCIsIG1ldGhvZCAidmVyaWZ5X3VpbnRuX3VpbnRuX2x0KGJ5dGVbXSxieXRlW10pYm9vbCIsIG1ldGhvZCAidmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2x0KGJ5dGVbXSxieXRlW10pYm9vbCIsIG1ldGhvZCAidmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX2x0KGJ5dGVbXSxieXRlW10pYm9vbCIsIG1ldGhvZCAidmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX2x0KGJ5dGVbXSxieXRlW10pYm9vbCIsIG1ldGhvZCAidmVyaWZ5X2J5dGVfYnl0ZV9sdChieXRlW10sYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV91aW50bl91aW50bl9sZShieXRlW10sYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV9iaWd1aW50bl91aW50bl9sZShieXRlW10sYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV91aW50bl9iaWd1aW50bl9sZShieXRlW10sYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9sZShieXRlW10sYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV9ieXRlX2J5dGVfbGUoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfdWludG5fdWludG5fZ3QoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfYmlndWludG5fdWludG5fZ3QoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfdWludG5fYmlndWludG5fZ3QoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfYmlndWludG5fYmlndWludG5fZ3QoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfYnl0ZV9ieXRlX2d0KGJ5dGVbXSxieXRlW10pYm9vbCIsIG1ldGhvZCAidmVyaWZ5X3VpbnRuX3VpbnRuX2dlKGJ5dGVbXSxieXRlW10pYm9vbCIsIG1ldGhvZCAidmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2dlKGJ5dGVbXSxieXRlW10pYm9vbCIsIG1ldGhvZCAidmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX2dlKGJ5dGVbXSxieXRlW10pYm9vbCIsIG1ldGhvZCAidmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX2dlKGJ5dGVbXSxieXRlW10pYm9vbCIsIG1ldGhvZCAidmVyaWZ5X2J5dGVfYnl0ZV9nZShieXRlW10sYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV91aW50bl9pbml0KGJ5dGVbXSl1aW50MzIiLCBtZXRob2QgInZlcmlmeV9iaWd1aW50bl9pbml0KGJ5dGVbXSl1aW50MjU2IiwgbWV0aG9kICJ2ZXJpZnlfYnl0ZV9pbml0KGJ5dGVbXSlieXRlIiwgbWV0aG9kICJ2ZXJpZnlfdWludG5fZnJvbV9ieXRlcyhieXRlW10pdWludDMyIiwgbWV0aG9kICJ2ZXJpZnlfYmlndWludG5fZnJvbV9ieXRlcyhieXRlW10pdWludDI1NiIsIG1ldGhvZCAidmVyaWZ5X2J5dGVfZnJvbV9ieXRlcyhieXRlW10pYnl0ZSIsIG1ldGhvZCAidmVyaWZ5X3VpbnRuX2Zyb21fbG9nKGJ5dGVbXSl1aW50MzIiLCBtZXRob2QgInZlcmlmeV9iaWd1aW50bl9mcm9tX2xvZyhieXRlW10pdWludDI1NiIsIG1ldGhvZCAidmVyaWZ5X2J5dGVfZnJvbV9sb2coYnl0ZVtdKWJ5dGUiLCBtZXRob2QgInZlcmlmeV91Zml4ZWRueG1fYnl0ZXModWZpeGVkMzJ4OClieXRlW10iLCBtZXRob2QgInZlcmlmeV9iaWd1Zml4ZWRueG1fYnl0ZXModWZpeGVkMjU2eDE2KWJ5dGVbXSIsIG1ldGhvZCAidmVyaWZ5X3VmaXhlZG54bV9mcm9tX2J5dGVzKGJ5dGVbXSl1Zml4ZWQzMng4IiwgbWV0aG9kICJ2ZXJpZnlfYmlndWZpeGVkbnhtX2Zyb21fYnl0ZXMoYnl0ZVtdKXVmaXhlZDI1NngxNiIsIG1ldGhvZCAidmVyaWZ5X3VmaXhlZG54bV9mcm9tX2xvZyhieXRlW10pdWZpeGVkMzJ4OCIsIG1ldGhvZCAidmVyaWZ5X2JpZ3VmaXhlZG54bV9mcm9tX2xvZyhieXRlW10pdWZpeGVkMjU2eDE2IiwgbWV0aG9kICJ2ZXJpZnlfc3RyaW5nX2luaXQoc3RyaW5nKXN0cmluZyIsIG1ldGhvZCAidmVyaWZ5X3N0cmluZ19hZGQoc3RyaW5nLHN0cmluZylzdHJpbmciLCBtZXRob2QgInZlcmlmeV9zdHJpbmdfZXEoc3RyaW5nLHN0cmluZylib29sIiwgbWV0aG9kICJ2ZXJpZnlfc3RyaW5nX2J5dGVzKHN0cmluZylieXRlW10iLCBtZXRob2QgInZlcmlmeV9zdHJpbmdfZnJvbV9ieXRlcyhieXRlW10pc3RyaW5nIiwgbWV0aG9kICJ2ZXJpZnlfc3RyaW5nX2Zyb21fbG9nKGJ5dGVbXSlzdHJpbmciLCBtZXRob2QgInZlcmlmeV9ib29sX2J5dGVzKGJvb2wpYnl0ZVtdIiwgbWV0aG9kICJ2ZXJpZnlfYm9vbF9mcm9tX2J5dGVzKGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfYm9vbF9mcm9tX2xvZyhieXRlW10pYm9vbCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV91aW50bl91aW50bl9lcV9yb3V0ZUAyIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV9iaWd1aW50bl91aW50bl9lcV9yb3V0ZUAzIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV91aW50bl9iaWd1aW50bl9lcV9yb3V0ZUA0IF9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9lcV9yb3V0ZUA1IF9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV9ieXRlX2J5dGVfZXFfcm91dGVANiBfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfdWludG5fdWludG5fbmVfcm91dGVANyBfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfYmlndWludG5fdWludG5fbmVfcm91dGVAOCBfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfdWludG5fYmlndWludG5fbmVfcm91dGVAOSBfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfYmlndWludG5fYmlndWludG5fbmVfcm91dGVAMTAgX19wdXlhX2FyYzRfcm91dGVyX19fdmVyaWZ5X2J5dGVfYnl0ZV9uZV9yb3V0ZUAxMSBfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfdWludG5fdWludG5fbHRfcm91dGVAMTIgX19wdXlhX2FyYzRfcm91dGVyX19fdmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2x0X3JvdXRlQDEzIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV91aW50bl9iaWd1aW50bl9sdF9yb3V0ZUAxNCBfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfYmlndWludG5fYmlndWludG5fbHRfcm91dGVAMTUgX19wdXlhX2FyYzRfcm91dGVyX19fdmVyaWZ5X2J5dGVfYnl0ZV9sdF9yb3V0ZUAxNiBfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfdWludG5fdWludG5fbGVfcm91dGVAMTcgX19wdXlhX2FyYzRfcm91dGVyX19fdmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2xlX3JvdXRlQDE4IF9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV91aW50bl9iaWd1aW50bl9sZV9yb3V0ZUAxOSBfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfYmlndWludG5fYmlndWludG5fbGVfcm91dGVAMjAgX19wdXlhX2FyYzRfcm91dGVyX19fdmVyaWZ5X2J5dGVfYnl0ZV9sZV9yb3V0ZUAyMSBfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfdWludG5fdWludG5fZ3Rfcm91dGVAMjIgX19wdXlhX2FyYzRfcm91dGVyX19fdmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2d0X3JvdXRlQDIzIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV91aW50bl9iaWd1aW50bl9ndF9yb3V0ZUAyNCBfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfYmlndWludG5fYmlndWludG5fZ3Rfcm91dGVAMjUgX19wdXlhX2FyYzRfcm91dGVyX19fdmVyaWZ5X2J5dGVfYnl0ZV9ndF9yb3V0ZUAyNiBfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfdWludG5fdWludG5fZ2Vfcm91dGVAMjcgX19wdXlhX2FyYzRfcm91dGVyX19fdmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2dlX3JvdXRlQDI4IF9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV91aW50bl9iaWd1aW50bl9nZV9yb3V0ZUAyOSBfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfYmlndWludG5fYmlndWludG5fZ2Vfcm91dGVAMzAgX19wdXlhX2FyYzRfcm91dGVyX19fdmVyaWZ5X2J5dGVfYnl0ZV9nZV9yb3V0ZUAzMSBfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfdWludG5faW5pdF9yb3V0ZUAzMiBfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfYmlndWludG5faW5pdF9yb3V0ZUAzMyBfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfYnl0ZV9pbml0X3JvdXRlQDM0IF9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV91aW50bl9mcm9tX2J5dGVzX3JvdXRlQDM1IF9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV9iaWd1aW50bl9mcm9tX2J5dGVzX3JvdXRlQDM2IF9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV9ieXRlX2Zyb21fYnl0ZXNfcm91dGVAMzcgX19wdXlhX2FyYzRfcm91dGVyX19fdmVyaWZ5X3VpbnRuX2Zyb21fbG9nX3JvdXRlQDM4IF9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV9iaWd1aW50bl9mcm9tX2xvZ19yb3V0ZUAzOSBfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfYnl0ZV9mcm9tX2xvZ19yb3V0ZUA0MCBfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfdWZpeGVkbnhtX2J5dGVzX3JvdXRlQDQxIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV9iaWd1Zml4ZWRueG1fYnl0ZXNfcm91dGVANDIgX19wdXlhX2FyYzRfcm91dGVyX19fdmVyaWZ5X3VmaXhlZG54bV9mcm9tX2J5dGVzX3JvdXRlQDQzIF9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV9iaWd1Zml4ZWRueG1fZnJvbV9ieXRlc19yb3V0ZUA0NCBfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfdWZpeGVkbnhtX2Zyb21fbG9nX3JvdXRlQDQ1IF9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV9iaWd1Zml4ZWRueG1fZnJvbV9sb2dfcm91dGVANDYgX19wdXlhX2FyYzRfcm91dGVyX19fdmVyaWZ5X3N0cmluZ19pbml0X3JvdXRlQDQ3IF9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV9zdHJpbmdfYWRkX3JvdXRlQDQ4IF9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV9zdHJpbmdfZXFfcm91dGVANDkgX19wdXlhX2FyYzRfcm91dGVyX19fdmVyaWZ5X3N0cmluZ19ieXRlc19yb3V0ZUA1MCBfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfc3RyaW5nX2Zyb21fYnl0ZXNfcm91dGVANTEgX19wdXlhX2FyYzRfcm91dGVyX19fdmVyaWZ5X3N0cmluZ19mcm9tX2xvZ19yb3V0ZUA1MiBfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfYm9vbF9ieXRlc19yb3V0ZUA1MyBfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfYm9vbF9mcm9tX2J5dGVzX3JvdXRlQDU0IF9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV9ib29sX2Zyb21fbG9nX3JvdXRlQDU1CiAgICBpbnRjXzMgLy8gMAogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfdWludG5fdWludG5fZXFfcm91dGVAMjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV91aW50bl91aW50bl9lcQogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzMgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV9iaWd1aW50bl91aW50bl9lcV9yb3V0ZUAzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYmlndWludG5fdWludG5fZXEKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfdWludG5fYmlndWludG5fZXFfcm91dGVANDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX2VxCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMyAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fdmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX2VxX3JvdXRlQDU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9lcQogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzMgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV9ieXRlX2J5dGVfZXFfcm91dGVANjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozNwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozNwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2J5dGVfYnl0ZV9lcQogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzMgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV91aW50bl91aW50bl9uZV9yb3V0ZUA3OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQ1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQ1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfdWludG5fdWludG5fbmUKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfYmlndWludG5fdWludG5fbmVfcm91dGVAODoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo1MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo1MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX25lCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMyAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fdmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX25lX3JvdXRlQDk6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV91aW50bl9iaWd1aW50bl9uZQogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzMgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9uZV9yb3V0ZUAxMDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo2OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo2OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX25lCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMyAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fdmVyaWZ5X2J5dGVfYnl0ZV9uZV9yb3V0ZUAxMToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo3NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo3NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2J5dGVfYnl0ZV9uZQogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzMgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV91aW50bl91aW50bl9sdF9yb3V0ZUAxMjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo4NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo4NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3VpbnRuX3VpbnRuX2x0CiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMyAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fdmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2x0X3JvdXRlQDEzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjkzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjkzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYmlndWludG5fdWludG5fbHQKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfdWludG5fYmlndWludG5fbHRfcm91dGVAMTQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTAxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEwMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX2x0CiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMyAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fdmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX2x0X3JvdXRlQDE1OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEwOQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMDkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9sdAogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzMgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV9ieXRlX2J5dGVfbHRfcm91dGVAMTY6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTE3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjExNwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2J5dGVfYnl0ZV9sdAogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzMgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV91aW50bl91aW50bl9sZV9yb3V0ZUAxNzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMjUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTI1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfdWludG5fdWludG5fbGUKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfYmlndWludG5fdWludG5fbGVfcm91dGVAMTg6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTMzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEzMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2xlCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMyAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fdmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX2xlX3JvdXRlQDE5OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE0MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxNDEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV91aW50bl9iaWd1aW50bl9sZQogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzMgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9sZV9yb3V0ZUAyMDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxNDkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTQ5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYmlndWludG5fYmlndWludG5fbGUKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfYnl0ZV9ieXRlX2xlX3JvdXRlQDIxOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE1NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxNTcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9ieXRlX2J5dGVfbGUKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfdWludG5fdWludG5fZ3Rfcm91dGVAMjI6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTY1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE2NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3VpbnRuX3VpbnRuX2d0CiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMyAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fdmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2d0X3JvdXRlQDIzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE3MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxNzMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9iaWd1aW50bl91aW50bl9ndAogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzMgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV91aW50bl9iaWd1aW50bl9ndF9yb3V0ZUAyNDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxODEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTgxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfdWludG5fYmlndWludG5fZ3QKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfYmlndWludG5fYmlndWludG5fZ3Rfcm91dGVAMjU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTg5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE4OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX2d0CiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMyAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fdmVyaWZ5X2J5dGVfYnl0ZV9ndF9yb3V0ZUAyNjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxOTcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTk3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYnl0ZV9ieXRlX2d0CiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMyAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fdmVyaWZ5X3VpbnRuX3VpbnRuX2dlX3JvdXRlQDI3OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIwNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMDUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV91aW50bl91aW50bl9nZQogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzMgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV9iaWd1aW50bl91aW50bl9nZV9yb3V0ZUAyODoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMTMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjEzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYmlndWludG5fdWludG5fZ2UKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfdWludG5fYmlndWludG5fZ2Vfcm91dGVAMjk6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjIxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIyMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX2dlCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMyAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fdmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX2dlX3JvdXRlQDMwOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIyOQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMjkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9nZQogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzMgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV9ieXRlX2J5dGVfZ2Vfcm91dGVAMzE6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjM3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIzNwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2J5dGVfYnl0ZV9nZQogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzMgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV91aW50bl9pbml0X3JvdXRlQDMyOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI0NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI0NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3VpbnRuX2luaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV9iaWd1aW50bl9pbml0X3JvdXRlQDMzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI1MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI1MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2JpZ3VpbnRuX2luaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV9ieXRlX2luaXRfcm91dGVAMzQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjU1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjU1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYnl0ZV9pbml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfdWludG5fZnJvbV9ieXRlc19yb3V0ZUAzNToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNjAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNjAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV91aW50bl9mcm9tX2J5dGVzCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfYmlndWludG5fZnJvbV9ieXRlc19yb3V0ZUAzNjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNjQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNjQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9iaWd1aW50bl9mcm9tX2J5dGVzCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfYnl0ZV9mcm9tX2J5dGVzX3JvdXRlQDM3OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI2OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI2OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2J5dGVfZnJvbV9ieXRlcwogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fdmVyaWZ5X3VpbnRuX2Zyb21fbG9nX3JvdXRlQDM4OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI3MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI3MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3VpbnRuX2Zyb21fbG9nCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfYmlndWludG5fZnJvbV9sb2dfcm91dGVAMzk6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Mjc2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Mjc2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYmlndWludG5fZnJvbV9sb2cKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV9ieXRlX2Zyb21fbG9nX3JvdXRlQDQwOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI4MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI4MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2J5dGVfZnJvbV9sb2cKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV91Zml4ZWRueG1fYnl0ZXNfcm91dGVANDE6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Mjg0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyODQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV91Zml4ZWRueG1fYnl0ZXMKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfYmlndWZpeGVkbnhtX2J5dGVzX3JvdXRlQDQyOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI4OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Mjg4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYmlndWZpeGVkbnhtX2J5dGVzCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fdmVyaWZ5X3VmaXhlZG54bV9mcm9tX2J5dGVzX3JvdXRlQDQzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI5MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI5MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3VmaXhlZG54bV9mcm9tX2J5dGVzCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfYmlndWZpeGVkbnhtX2Zyb21fYnl0ZXNfcm91dGVANDQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Mjk2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Mjk2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYmlndWZpeGVkbnhtX2Zyb21fYnl0ZXMKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV91Zml4ZWRueG1fZnJvbV9sb2dfcm91dGVANDU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzAwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzAwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfdWZpeGVkbnhtX2Zyb21fbG9nCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfYmlndWZpeGVkbnhtX2Zyb21fbG9nX3JvdXRlQDQ2OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMwNAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMwNAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2JpZ3VmaXhlZG54bV9mcm9tX2xvZwogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fdmVyaWZ5X3N0cmluZ19pbml0X3JvdXRlQDQ3OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMwOAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMwOAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3N0cmluZ19pbml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfc3RyaW5nX2FkZF9yb3V0ZUA0ODoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMTMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMxMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3N0cmluZ19hZGQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV9zdHJpbmdfZXFfcm91dGVANDk6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzE4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMTgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9zdHJpbmdfZXEKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfc3RyaW5nX2J5dGVzX3JvdXRlQDUwOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMyMgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMyMgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3N0cmluZ19ieXRlcwogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV9zdHJpbmdfZnJvbV9ieXRlc19yb3V0ZUA1MToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMjcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMjcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9zdHJpbmdfZnJvbV9ieXRlcwogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fdmVyaWZ5X3N0cmluZ19mcm9tX2xvZ19yb3V0ZUA1MjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMzEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMzEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9zdHJpbmdfZnJvbV9sb2cKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV9ib29sX2J5dGVzX3JvdXRlQDUzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMzNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzM1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYm9vbF9ieXRlcwogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXRzdWIKCl9fcHV5YV9hcmM0X3JvdXRlcl9fX3ZlcmlmeV9ib29sX2Zyb21fYnl0ZXNfcm91dGVANTQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzM5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzM5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYm9vbF9mcm9tX2J5dGVzCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX192ZXJpZnlfYm9vbF9mcm9tX2xvZ19yb3V0ZUA1NToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozNDMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozNDMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9ib29sX2Zyb21fbG9nCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0c3ViCgpfX3B1eWFfYXJjNF9yb3V0ZXJfX19iYXJlX3JvdXRpbmdANTg6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGJueiBfX3B1eWFfYXJjNF9yb3V0ZXJfX19hZnRlcl9pZl9lbHNlQDYyCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgaW50Y18wIC8vIDEKICAgIHJldHN1YgoKX19wdXlhX2FyYzRfcm91dGVyX19fYWZ0ZXJfaWZfZWxzZUA2MjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18zIC8vIDAKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV91aW50bl91aW50bl9lcShhOiBieXRlcywgYjogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X3VpbnRuX3VpbnRuX2VxOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjUtNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfdWludG5fdWludG5fZXEoYTogYnl0ZXMsIGI6IGJ5dGVzKTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo5CiAgICAvLyBjb25zdCBhVWludE4gPSBuZXcgVWludE48NjQ+KGFCaWd1aW50KQogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIGludGNfMSAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzEgLy8gOAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgZGlnIDEKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTAKICAgIC8vIGNvbnN0IGJVaW50TiA9IG5ldyBVaW50Tjw2ND4oYkJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGZyYW1lX2RpZyAtMQogICAgdW5jb3ZlciAyCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjExCiAgICAvLyByZXR1cm4gYVVpbnROID09PSBiVWludE4KICAgID09CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludG5fdWludG5fZXEoYTogYnl0ZXMsIGI6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV9iaWd1aW50bl91aW50bl9lcToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMy0xNAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYmlndWludG5fdWludG5fZXEoYTogYnl0ZXMsIGI6IGJ5dGVzKTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxNwogICAgLy8gY29uc3QgYVVpbnROID0gbmV3IFVpbnROPDUxMj4oYUJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaW50Y18yIC8vIDY0CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzIgLy8gNjQKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTIKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTgKICAgIC8vIGNvbnN0IGJVaW50TiA9IG5ldyBVaW50Tjw2ND4oYkJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMSAvLyA4CiAgICBiemVybwogICAgZnJhbWVfZGlnIC0xCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE5CiAgICAvLyByZXR1cm4gYVVpbnROLmJ5dGVzLmVxdWFscyhiVWludE4uYnl0ZXMpCiAgICA9PQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX2VxKGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfdWludG5fYmlndWludG5fZXE6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjEtMjIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX2VxKGE6IGJ5dGVzLCBiOiBieXRlcyk6IGJvb2xlYW4gewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjUKICAgIC8vIGNvbnN0IGFVaW50TiA9IG5ldyBVaW50Tjw2ND4oYUJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMSAvLyA4CiAgICBiemVybwogICAgZnJhbWVfZGlnIC0yCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI2CiAgICAvLyBjb25zdCBiVWludE4gPSBuZXcgVWludE48NTEyPihiQmlndWludCkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpbnRjXzIgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMiAvLyA2NAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMQogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNwogICAgLy8gcmV0dXJuIGFVaW50Ti5ieXRlcy5lcXVhbHMoYlVpbnROLmJ5dGVzKQogICAgPT0KICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9lcShhOiBieXRlcywgYjogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX2VxOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI5LTMwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9lcShhOiBieXRlcywgYjogYnl0ZXMpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMzCiAgICAvLyBjb25zdCBhVWludE4gPSBuZXcgVWludE48NTEyPihhQmlndWludCkKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpbnRjXzIgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMiAvLyA2NAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgZGlnIDEKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzQKICAgIC8vIGNvbnN0IGJVaW50TiA9IG5ldyBVaW50Tjw1MTI+KGJCaWd1aW50KQogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGludGNfMiAvLyA2NAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgZnJhbWVfZGlnIC0xCiAgICB1bmNvdmVyIDIKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzUKICAgIC8vIHJldHVybiBhVWludE4gPT09IGJVaW50TgogICAgPT0KICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9ieXRlX2J5dGVfZXEoYTogYnl0ZXMsIGI6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV9ieXRlX2J5dGVfZXE6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzctMzgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2J5dGVfYnl0ZV9lcShhOiBieXRlcywgYjogYnl0ZXMpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQxCiAgICAvLyBjb25zdCBhQnl0ZSA9IG5ldyBCeXRlKGFCaWd1aW50KQogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIGludGNfMCAvLyAxCiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzAgLy8gMQogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgZGlnIDEKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDIKICAgIC8vIGNvbnN0IGJCeXRlID0gbmV3IEJ5dGUoYkJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGZyYW1lX2RpZyAtMQogICAgdW5jb3ZlciAyCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQzCiAgICAvLyByZXR1cm4gYUJ5dGUgPT09IGJCeXRlCiAgICA9PQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3VpbnRuX3VpbnRuX25lKGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfdWludG5fdWludG5fbmU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDUtNDYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X3VpbnRuX3VpbnRuX25lKGE6IGJ5dGVzLCBiOiBieXRlcyk6IGJvb2xlYW4gewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDkKICAgIC8vIGNvbnN0IGFVaW50TiA9IG5ldyBVaW50Tjw2ND4oYUJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMSAvLyA4CiAgICBiemVybwogICAgZnJhbWVfZGlnIC0yCiAgICBkaWcgMQogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo1MAogICAgLy8gY29uc3QgYlVpbnROID0gbmV3IFVpbnROPDY0PihiQmlndWludCkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgZnJhbWVfZGlnIC0xCiAgICB1bmNvdmVyIDIKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NTEKICAgIC8vIHJldHVybiBhVWludE4gIT09IGJVaW50TgogICAgIT0KICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9iaWd1aW50bl91aW50bl9uZShhOiBieXRlcywgYjogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX25lOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjUzLTU0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9iaWd1aW50bl91aW50bl9uZShhOiBieXRlcywgYjogYnl0ZXMpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjU3CiAgICAvLyBjb25zdCBhVWludE4gPSBuZXcgVWludE48NTEyPihhQmlndWludCkKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpbnRjXzIgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMiAvLyA2NAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo1OAogICAgLy8gY29uc3QgYlVpbnROID0gbmV3IFVpbnROPDY0PihiQmlndWludCkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18xIC8vIDgKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTEKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NTkKICAgIC8vIHJldHVybiAhYVVpbnROLmJ5dGVzLmVxdWFscyhiVWludE4uYnl0ZXMpCiAgICA9PQogICAgIQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX25lKGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfdWludG5fYmlndWludG5fbmU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjEtNjIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX25lKGE6IGJ5dGVzLCBiOiBieXRlcyk6IGJvb2xlYW4gewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjUKICAgIC8vIGNvbnN0IGFVaW50TiA9IG5ldyBVaW50Tjw2ND4oYUJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMSAvLyA4CiAgICBiemVybwogICAgZnJhbWVfZGlnIC0yCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjY2CiAgICAvLyBjb25zdCBiVWludE4gPSBuZXcgVWludE48NTEyPihiQmlndWludCkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpbnRjXzIgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMiAvLyA2NAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMQogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo2NwogICAgLy8gcmV0dXJuICFhVWludE4uYnl0ZXMuZXF1YWxzKGJVaW50Ti5ieXRlcykKICAgID09CiAgICAhCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludG5fYmlndWludG5fbmUoYTogYnl0ZXMsIGI6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9uZToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo2OS03MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYmlndWludG5fYmlndWludG5fbmUoYTogYnl0ZXMsIGI6IGJ5dGVzKTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo3MwogICAgLy8gY29uc3QgYVVpbnROID0gbmV3IFVpbnROPDUxMj4oYUJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaW50Y18yIC8vIDY0CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzIgLy8gNjQKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTIKICAgIGRpZyAxCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc0CiAgICAvLyBjb25zdCBiVWludE4gPSBuZXcgVWludE48NTEyPihiQmlndWludCkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpbnRjXzIgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGZyYW1lX2RpZyAtMQogICAgdW5jb3ZlciAyCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc1CiAgICAvLyByZXR1cm4gYVVpbnROICE9PSBiVWludE4KICAgICE9CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYnl0ZV9ieXRlX25lKGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfYnl0ZV9ieXRlX25lOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjc3LTc4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9ieXRlX2J5dGVfbmUoYTogYnl0ZXMsIGI6IGJ5dGVzKTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo4MQogICAgLy8gY29uc3QgYUJ5dGUgPSBuZXcgQnl0ZShhQmlndWludCkKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18wIC8vIDEKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTIKICAgIGRpZyAxCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjgyCiAgICAvLyBjb25zdCBiQnl0ZSA9IG5ldyBCeXRlKGJCaWd1aW50KQogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGludGNfMCAvLyAxCiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBmcmFtZV9kaWcgLTEKICAgIHVuY292ZXIgMgogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo4MwogICAgLy8gcmV0dXJuIGFCeXRlICE9PSBiQnl0ZQogICAgIT0KICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV91aW50bl91aW50bl9sdChhOiBieXRlcywgYjogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X3VpbnRuX3VpbnRuX2x0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjg1LTg2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV91aW50bl91aW50bl9sdChhOiBieXRlcywgYjogYnl0ZXMpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjg5CiAgICAvLyBjb25zdCBhVWludE4gPSBuZXcgVWludE48NjQ+KGFCaWd1aW50KQogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIGludGNfMSAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzEgLy8gOAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgZGlnIDEKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OTAKICAgIC8vIGNvbnN0IGJVaW50TiA9IG5ldyBVaW50Tjw2ND4oYkJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGZyYW1lX2RpZyAtMQogICAgdW5jb3ZlciAyCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjkxCiAgICAvLyByZXR1cm4gYVVpbnROLm5hdGl2ZSA8IGJVaW50Ti5uYXRpdmUKICAgIHN3YXAKICAgIGJ0b2kKICAgIHN3YXAKICAgIGJ0b2kKICAgIDwKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9iaWd1aW50bl91aW50bl9sdChhOiBieXRlcywgYjogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2x0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjkzLTk0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9iaWd1aW50bl91aW50bl9sdChhOiBieXRlcywgYjogYnl0ZXMpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjk3CiAgICAvLyBjb25zdCBhVWludE4gPSBuZXcgVWludE48NTEyPihhQmlndWludCkKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpbnRjXzIgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMiAvLyA2NAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo5OAogICAgLy8gY29uc3QgYlVpbnROID0gbmV3IFVpbnROPDY0PihiQmlndWludCkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18xIC8vIDgKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTEKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OTkKICAgIC8vIHJldHVybiBhVWludE4ubmF0aXZlIDwgQmlnVWludChiVWludE4ubmF0aXZlKQogICAgYnRvaQogICAgaXRvYgogICAgYjwKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV91aW50bl9iaWd1aW50bl9sdChhOiBieXRlcywgYjogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX2x0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEwMS0xMDIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX2x0KGE6IGJ5dGVzLCBiOiBieXRlcyk6IGJvb2xlYW4gewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTA1CiAgICAvLyBjb25zdCBhVWludE4gPSBuZXcgVWludE48NjQ+KGFCaWd1aW50KQogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIGludGNfMSAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzEgLy8gOAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMDYKICAgIC8vIGNvbnN0IGJVaW50TiA9IG5ldyBVaW50Tjw1MTI+KGJCaWd1aW50KQogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGludGNfMiAvLyA2NAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18yIC8vIDY0CiAgICBiemVybwogICAgZnJhbWVfZGlnIC0xCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEwNwogICAgLy8gcmV0dXJuIEJpZ1VpbnQoYVVpbnROLm5hdGl2ZSkgPCBiVWludE4ubmF0aXZlCiAgICBzd2FwCiAgICBidG9pCiAgICBpdG9iCiAgICBiPgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX2x0KGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfYmlndWludG5fYmlndWludG5fbHQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTA5LTExMAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYmlndWludG5fYmlndWludG5fbHQoYTogYnl0ZXMsIGI6IGJ5dGVzKTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMTMKICAgIC8vIGNvbnN0IGFVaW50TiA9IG5ldyBVaW50Tjw1MTI+KGFCaWd1aW50KQogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIGludGNfMiAvLyA2NAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18yIC8vIDY0CiAgICBiemVybwogICAgZnJhbWVfZGlnIC0yCiAgICBkaWcgMQogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMTQKICAgIC8vIGNvbnN0IGJVaW50TiA9IG5ldyBVaW50Tjw1MTI+KGJCaWd1aW50KQogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGludGNfMiAvLyA2NAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgZnJhbWVfZGlnIC0xCiAgICB1bmNvdmVyIDIKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTE1CiAgICAvLyByZXR1cm4gYVVpbnROLm5hdGl2ZSA8IGJVaW50Ti5uYXRpdmUKICAgIGI8CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYnl0ZV9ieXRlX2x0KGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfYnl0ZV9ieXRlX2x0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjExNy0xMTgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2J5dGVfYnl0ZV9sdChhOiBieXRlcywgYjogYnl0ZXMpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEyMQogICAgLy8gY29uc3QgYUJ5dGUgPSBuZXcgQnl0ZShhQmlndWludCkKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18wIC8vIDEKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTIKICAgIGRpZyAxCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEyMgogICAgLy8gY29uc3QgYkJ5dGUgPSBuZXcgQnl0ZShiQmlndWludCkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgZnJhbWVfZGlnIC0xCiAgICB1bmNvdmVyIDIKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTIzCiAgICAvLyByZXR1cm4gYUJ5dGUubmF0aXZlIDwgYkJ5dGUubmF0aXZlCiAgICBzd2FwCiAgICBidG9pCiAgICBzd2FwCiAgICBidG9pCiAgICA8CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfdWludG5fdWludG5fbGUoYTogYnl0ZXMsIGI6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV91aW50bl91aW50bl9sZToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMjUtMTI2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV91aW50bl91aW50bl9sZShhOiBieXRlcywgYjogYnl0ZXMpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEyOQogICAgLy8gY29uc3QgYVVpbnROID0gbmV3IFVpbnROPDY0PihhQmlndWludCkKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18xIC8vIDgKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTIKICAgIGRpZyAxCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEzMAogICAgLy8gY29uc3QgYlVpbnROID0gbmV3IFVpbnROPDY0PihiQmlndWludCkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgZnJhbWVfZGlnIC0xCiAgICB1bmNvdmVyIDIKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTMxCiAgICAvLyByZXR1cm4gYVVpbnROLm5hdGl2ZSA8PSBiVWludE4ubmF0aXZlCiAgICBzd2FwCiAgICBidG9pCiAgICBzd2FwCiAgICBidG9pCiAgICA8PQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2xlKGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfYmlndWludG5fdWludG5fbGU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTMzLTEzNAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYmlndWludG5fdWludG5fbGUoYTogYnl0ZXMsIGI6IGJ5dGVzKTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMzcKICAgIC8vIGNvbnN0IGFVaW50TiA9IG5ldyBVaW50Tjw1MTI+KGFCaWd1aW50KQogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIGludGNfMiAvLyA2NAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18yIC8vIDY0CiAgICBiemVybwogICAgZnJhbWVfZGlnIC0yCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEzOAogICAgLy8gY29uc3QgYlVpbnROID0gbmV3IFVpbnROPDY0PihiQmlndWludCkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18xIC8vIDgKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTEKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTM5CiAgICAvLyByZXR1cm4gYVVpbnROLm5hdGl2ZSA8PSBCaWdVaW50KGJVaW50Ti5uYXRpdmUpCiAgICBidG9pCiAgICBpdG9iCiAgICBiPD0KICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV91aW50bl9iaWd1aW50bl9sZShhOiBieXRlcywgYjogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX2xlOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE0MS0xNDIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX2xlKGE6IGJ5dGVzLCBiOiBieXRlcyk6IGJvb2xlYW4gewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTQ1CiAgICAvLyBjb25zdCBhVWludE4gPSBuZXcgVWludE48NjQ+KGFCaWd1aW50KQogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIGludGNfMSAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzEgLy8gOAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxNDYKICAgIC8vIGNvbnN0IGJVaW50TiA9IG5ldyBVaW50Tjw1MTI+KGJCaWd1aW50KQogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGludGNfMiAvLyA2NAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18yIC8vIDY0CiAgICBiemVybwogICAgZnJhbWVfZGlnIC0xCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE0NwogICAgLy8gcmV0dXJuIEJpZ1VpbnQoYVVpbnROLm5hdGl2ZSkgPD0gYlVpbnROLm5hdGl2ZQogICAgc3dhcAogICAgYnRvaQogICAgaXRvYgogICAgYj49CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludG5fYmlndWludG5fbGUoYTogYnl0ZXMsIGI6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9sZToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxNDktMTUwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9sZShhOiBieXRlcywgYjogYnl0ZXMpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE1MwogICAgLy8gY29uc3QgYVVpbnROID0gbmV3IFVpbnROPDUxMj4oYUJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaW50Y18yIC8vIDY0CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzIgLy8gNjQKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTIKICAgIGRpZyAxCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE1NAogICAgLy8gY29uc3QgYlVpbnROID0gbmV3IFVpbnROPDUxMj4oYkJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgaW50Y18yIC8vIDY0CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBmcmFtZV9kaWcgLTEKICAgIHVuY292ZXIgMgogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxNTUKICAgIC8vIHJldHVybiBhVWludE4ubmF0aXZlIDw9IGJVaW50Ti5uYXRpdmUKICAgIGI8PQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2J5dGVfYnl0ZV9sZShhOiBieXRlcywgYjogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X2J5dGVfYnl0ZV9sZToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxNTctMTU4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9ieXRlX2J5dGVfbGUoYTogYnl0ZXMsIGI6IGJ5dGVzKTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxNjEKICAgIC8vIGNvbnN0IGFCeXRlID0gbmV3IEJ5dGUoYUJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMCAvLyAxCiAgICBiemVybwogICAgZnJhbWVfZGlnIC0yCiAgICBkaWcgMQogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxNjIKICAgIC8vIGNvbnN0IGJCeXRlID0gbmV3IEJ5dGUoYkJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGZyYW1lX2RpZyAtMQogICAgdW5jb3ZlciAyCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE2MwogICAgLy8gcmV0dXJuIGFCeXRlLm5hdGl2ZSA8PSBiQnl0ZS5uYXRpdmUKICAgIHN3YXAKICAgIGJ0b2kKICAgIHN3YXAKICAgIGJ0b2kKICAgIDw9CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfdWludG5fdWludG5fZ3QoYTogYnl0ZXMsIGI6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV91aW50bl91aW50bl9ndDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxNjUtMTY2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV91aW50bl91aW50bl9ndChhOiBieXRlcywgYjogYnl0ZXMpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE2OQogICAgLy8gY29uc3QgYVVpbnROID0gbmV3IFVpbnROPDY0PihhQmlndWludCkKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18xIC8vIDgKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTIKICAgIGRpZyAxCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE3MAogICAgLy8gY29uc3QgYlVpbnROID0gbmV3IFVpbnROPDY0PihiQmlndWludCkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgZnJhbWVfZGlnIC0xCiAgICB1bmNvdmVyIDIKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTcxCiAgICAvLyByZXR1cm4gYVVpbnROLm5hdGl2ZSA+IGJVaW50Ti5uYXRpdmUKICAgIHN3YXAKICAgIGJ0b2kKICAgIHN3YXAKICAgIGJ0b2kKICAgID4KICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9iaWd1aW50bl91aW50bl9ndChhOiBieXRlcywgYjogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2d0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE3My0xNzQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2d0KGE6IGJ5dGVzLCBiOiBieXRlcyk6IGJvb2xlYW4gewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTc3CiAgICAvLyBjb25zdCBhVWludE4gPSBuZXcgVWludE48NTEyPihhQmlndWludCkKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpbnRjXzIgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMiAvLyA2NAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxNzgKICAgIC8vIGNvbnN0IGJVaW50TiA9IG5ldyBVaW50Tjw2ND4oYkJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMSAvLyA4CiAgICBiemVybwogICAgZnJhbWVfZGlnIC0xCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE3OQogICAgLy8gcmV0dXJuIGFVaW50Ti5uYXRpdmUgPiBCaWdVaW50KGJVaW50Ti5uYXRpdmUpCiAgICBidG9pCiAgICBpdG9iCiAgICBiPgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX2d0KGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfdWludG5fYmlndWludG5fZ3Q6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTgxLTE4MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfdWludG5fYmlndWludG5fZ3QoYTogYnl0ZXMsIGI6IGJ5dGVzKTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxODUKICAgIC8vIGNvbnN0IGFVaW50TiA9IG5ldyBVaW50Tjw2ND4oYUJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMSAvLyA4CiAgICBiemVybwogICAgZnJhbWVfZGlnIC0yCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE4NgogICAgLy8gY29uc3QgYlVpbnROID0gbmV3IFVpbnROPDUxMj4oYkJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgaW50Y18yIC8vIDY0CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzIgLy8gNjQKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTEKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTg3CiAgICAvLyByZXR1cm4gQmlnVWludChhVWludE4ubmF0aXZlKSA+IGJVaW50Ti5uYXRpdmUKICAgIHN3YXAKICAgIGJ0b2kKICAgIGl0b2IKICAgIGI8CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludG5fYmlndWludG5fZ3QoYTogYnl0ZXMsIGI6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9ndDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxODktMTkwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9ndChhOiBieXRlcywgYjogYnl0ZXMpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE5MwogICAgLy8gY29uc3QgYVVpbnROID0gbmV3IFVpbnROPDUxMj4oYUJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaW50Y18yIC8vIDY0CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzIgLy8gNjQKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTIKICAgIGRpZyAxCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE5NAogICAgLy8gY29uc3QgYlVpbnROID0gbmV3IFVpbnROPDUxMj4oYkJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgaW50Y18yIC8vIDY0CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBmcmFtZV9kaWcgLTEKICAgIHVuY292ZXIgMgogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxOTUKICAgIC8vIHJldHVybiBhVWludE4ubmF0aXZlID4gYlVpbnROLm5hdGl2ZQogICAgYj4KICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9ieXRlX2J5dGVfZ3QoYTogYnl0ZXMsIGI6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV9ieXRlX2J5dGVfZ3Q6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTk3LTE5OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYnl0ZV9ieXRlX2d0KGE6IGJ5dGVzLCBiOiBieXRlcyk6IGJvb2xlYW4gewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjAxCiAgICAvLyBjb25zdCBhQnl0ZSA9IG5ldyBCeXRlKGFCaWd1aW50KQogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIGludGNfMCAvLyAxCiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzAgLy8gMQogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgZGlnIDEKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjAyCiAgICAvLyBjb25zdCBiQnl0ZSA9IG5ldyBCeXRlKGJCaWd1aW50KQogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGludGNfMCAvLyAxCiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBmcmFtZV9kaWcgLTEKICAgIHVuY292ZXIgMgogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMDMKICAgIC8vIHJldHVybiBhQnl0ZS5uYXRpdmUgPiBiQnl0ZS5uYXRpdmUKICAgIHN3YXAKICAgIGJ0b2kKICAgIHN3YXAKICAgIGJ0b2kKICAgID4KICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV91aW50bl91aW50bl9nZShhOiBieXRlcywgYjogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X3VpbnRuX3VpbnRuX2dlOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIwNS0yMDYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X3VpbnRuX3VpbnRuX2dlKGE6IGJ5dGVzLCBiOiBieXRlcyk6IGJvb2xlYW4gewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjA5CiAgICAvLyBjb25zdCBhVWludE4gPSBuZXcgVWludE48NjQ+KGFCaWd1aW50KQogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIGludGNfMSAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzEgLy8gOAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgZGlnIDEKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjEwCiAgICAvLyBjb25zdCBiVWludE4gPSBuZXcgVWludE48NjQ+KGJCaWd1aW50KQogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGludGNfMSAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBmcmFtZV9kaWcgLTEKICAgIHVuY292ZXIgMgogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMTEKICAgIC8vIHJldHVybiBhVWludE4ubmF0aXZlID49IGJVaW50Ti5uYXRpdmUKICAgIHN3YXAKICAgIGJ0b2kKICAgIHN3YXAKICAgIGJ0b2kKICAgID49CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludG5fdWludG5fZ2UoYTogYnl0ZXMsIGI6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV9iaWd1aW50bl91aW50bl9nZToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMTMtMjE0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9iaWd1aW50bl91aW50bl9nZShhOiBieXRlcywgYjogYnl0ZXMpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIxNwogICAgLy8gY29uc3QgYVVpbnROID0gbmV3IFVpbnROPDUxMj4oYUJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaW50Y18yIC8vIDY0CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzIgLy8gNjQKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTIKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjE4CiAgICAvLyBjb25zdCBiVWludE4gPSBuZXcgVWludE48NjQ+KGJCaWd1aW50KQogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGludGNfMSAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzEgLy8gOAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMQogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMTkKICAgIC8vIHJldHVybiBhVWludE4ubmF0aXZlID49IEJpZ1VpbnQoYlVpbnROLm5hdGl2ZSkKICAgIGJ0b2kKICAgIGl0b2IKICAgIGI+PQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX2dlKGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfdWludG5fYmlndWludG5fZ2U6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjIxLTIyMgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfdWludG5fYmlndWludG5fZ2UoYTogYnl0ZXMsIGI6IGJ5dGVzKTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMjUKICAgIC8vIGNvbnN0IGFVaW50TiA9IG5ldyBVaW50Tjw2ND4oYUJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMSAvLyA4CiAgICBiemVybwogICAgZnJhbWVfZGlnIC0yCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIyNgogICAgLy8gY29uc3QgYlVpbnROID0gbmV3IFVpbnROPDUxMj4oYkJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgaW50Y18yIC8vIDY0CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzIgLy8gNjQKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTEKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjI3CiAgICAvLyByZXR1cm4gQmlnVWludChhVWludE4ubmF0aXZlKSA+PSBiVWludE4ubmF0aXZlCiAgICBzd2FwCiAgICBidG9pCiAgICBpdG9iCiAgICBiPD0KICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9nZShhOiBieXRlcywgYjogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX2dlOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIyOS0yMzAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX2dlKGE6IGJ5dGVzLCBiOiBieXRlcyk6IGJvb2xlYW4gewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjMzCiAgICAvLyBjb25zdCBhVWludE4gPSBuZXcgVWludE48NTEyPihhQmlndWludCkKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpbnRjXzIgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMiAvLyA2NAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgZGlnIDEKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjM0CiAgICAvLyBjb25zdCBiVWludE4gPSBuZXcgVWludE48NTEyPihiQmlndWludCkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpbnRjXzIgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGZyYW1lX2RpZyAtMQogICAgdW5jb3ZlciAyCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIzNQogICAgLy8gcmV0dXJuIGFVaW50Ti5uYXRpdmUgPj0gYlVpbnROLm5hdGl2ZQogICAgYj49CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYnl0ZV9ieXRlX2dlKGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfYnl0ZV9ieXRlX2dlOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIzNy0yMzgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2J5dGVfYnl0ZV9nZShhOiBieXRlcywgYjogYnl0ZXMpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI0MQogICAgLy8gY29uc3QgYUJ5dGUgPSBuZXcgQnl0ZShhQmlndWludCkKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18wIC8vIDEKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTIKICAgIGRpZyAxCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI0MgogICAgLy8gY29uc3QgYkJ5dGUgPSBuZXcgQnl0ZShiQmlndWludCkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgZnJhbWVfZGlnIC0xCiAgICB1bmNvdmVyIDIKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjQzCiAgICAvLyByZXR1cm4gYUJ5dGUubmF0aXZlID49IGJCeXRlLm5hdGl2ZQogICAgc3dhcAogICAgYnRvaQogICAgc3dhcAogICAgYnRvaQogICAgPj0KICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV91aW50bl9pbml0KGE6IGJ5dGVzKSAtPiBieXRlczoKdmVyaWZ5X3VpbnRuX2luaXQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjQ1LTI0NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfdWludG5faW5pdChhOiBieXRlcyk6IFVpbnROPDMyPiB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNDgKICAgIC8vIHJldHVybiBuZXcgVWludE48MzI+KGFCaWd1aW50KQogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIHB1c2hpbnQgNCAvLyA0CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBwdXNoaW50IDQgLy8gNAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMQogICAgYnwKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9iaWd1aW50bl9pbml0KGE6IGJ5dGVzKSAtPiBieXRlczoKdmVyaWZ5X2JpZ3VpbnRuX2luaXQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjUwLTI1MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYmlndWludG5faW5pdChhOiBieXRlcyk6IFVpbnROPDI1Nj4gewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjUzCiAgICAvLyByZXR1cm4gbmV3IFVpbnROPDI1Nj4oYUJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgcHVzaGludCAzMiAvLyAzMgogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgcHVzaGludCAzMiAvLyAzMgogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMQogICAgYnwKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9ieXRlX2luaXQoYTogYnl0ZXMpIC0+IGJ5dGVzOgp2ZXJpZnlfYnl0ZV9pbml0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI1NS0yNTYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2J5dGVfaW5pdChhOiBieXRlcyk6IEJ5dGUgewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjU4CiAgICAvLyByZXR1cm4gbmV3IEJ5dGUoYUJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMCAvLyAxCiAgICBiemVybwogICAgZnJhbWVfZGlnIC0xCiAgICBifAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3VpbnRuX2Zyb21fYnl0ZXMoYTogYnl0ZXMpIC0+IGJ5dGVzOgp2ZXJpZnlfdWludG5fZnJvbV9ieXRlczoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNjAtMjYxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV91aW50bl9mcm9tX2J5dGVzKGE6IGJ5dGVzKTogVWludE48MzI+IHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI2MgogICAgLy8gcmV0dXJuIGludGVycHJldEFzQXJjNDxVaW50TjwzMj4+KGEpCiAgICBmcmFtZV9kaWcgLTEKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9iaWd1aW50bl9mcm9tX2J5dGVzKGE6IGJ5dGVzKSAtPiBieXRlczoKdmVyaWZ5X2JpZ3VpbnRuX2Zyb21fYnl0ZXM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjY0LTI2NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYmlndWludG5fZnJvbV9ieXRlcyhhOiBieXRlcyk6IFVpbnROPDI1Nj4gewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjY2CiAgICAvLyByZXR1cm4gaW50ZXJwcmV0QXNBcmM0PFVpbnROPDI1Nj4+KGEpCiAgICBmcmFtZV9kaWcgLTEKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9ieXRlX2Zyb21fYnl0ZXMoYTogYnl0ZXMpIC0+IGJ5dGVzOgp2ZXJpZnlfYnl0ZV9mcm9tX2J5dGVzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI2OC0yNjkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2J5dGVfZnJvbV9ieXRlcyhhOiBieXRlcyk6IEJ5dGUgewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjcwCiAgICAvLyByZXR1cm4gaW50ZXJwcmV0QXNBcmM0PEJ5dGU+KGEpCiAgICBmcmFtZV9kaWcgLTEKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV91aW50bl9mcm9tX2xvZyhhOiBieXRlcykgLT4gYnl0ZXM6CnZlcmlmeV91aW50bl9mcm9tX2xvZzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNzItMjczCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV91aW50bl9mcm9tX2xvZyhhOiBieXRlcyk6IFVpbnROPDMyPiB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNzQKICAgIC8vIHJldHVybiBpbnRlcnByZXRBc0FyYzQ8VWludE48MzI+PihhLCAnbG9nJykKICAgIGZyYW1lX2RpZyAtMQogICAgZXh0cmFjdCA0IDAKICAgIGZyYW1lX2RpZyAtMQogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBCeXRlcyBoYXMgdmFsaWQgcHJlZml4CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludG5fZnJvbV9sb2coYTogYnl0ZXMpIC0+IGJ5dGVzOgp2ZXJpZnlfYmlndWludG5fZnJvbV9sb2c6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Mjc2LTI3NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYmlndWludG5fZnJvbV9sb2coYTogYnl0ZXMpOiBVaW50TjwyNTY+IHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI3OAogICAgLy8gcmV0dXJuIGludGVycHJldEFzQXJjNDxVaW50TjwyNTY+PihhLCAnbG9nJykKICAgIGZyYW1lX2RpZyAtMQogICAgZXh0cmFjdCA0IDAKICAgIGZyYW1lX2RpZyAtMQogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBCeXRlcyBoYXMgdmFsaWQgcHJlZml4CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYnl0ZV9mcm9tX2xvZyhhOiBieXRlcykgLT4gYnl0ZXM6CnZlcmlmeV9ieXRlX2Zyb21fbG9nOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI4MC0yODEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2J5dGVfZnJvbV9sb2coYTogYnl0ZXMpOiBCeXRlIHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI4MgogICAgLy8gcmV0dXJuIGludGVycHJldEFzQXJjNDxCeXRlPihhLCAnbG9nJykKICAgIGZyYW1lX2RpZyAtMQogICAgZXh0cmFjdCA0IDAKICAgIGZyYW1lX2RpZyAtMQogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBCeXRlcyBoYXMgdmFsaWQgcHJlZml4CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfdWZpeGVkbnhtX2J5dGVzKGE6IGJ5dGVzKSAtPiBieXRlczoKdmVyaWZ5X3VmaXhlZG54bV9ieXRlczoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyODQtMjg1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV91Zml4ZWRueG1fYnl0ZXMoYTogVUZpeGVkTnhNPDMyLCA4Pik6IGJ5dGVzIHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI4NgogICAgLy8gcmV0dXJuIGEuYnl0ZXMKICAgIGZyYW1lX2RpZyAtMQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2JpZ3VmaXhlZG54bV9ieXRlcyhhOiBieXRlcykgLT4gYnl0ZXM6CnZlcmlmeV9iaWd1Zml4ZWRueG1fYnl0ZXM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Mjg4LTI4OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYmlndWZpeGVkbnhtX2J5dGVzKGE6IFVGaXhlZE54TTwyNTYsIDE2Pik6IGJ5dGVzIHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI5MAogICAgLy8gcmV0dXJuIGEuYnl0ZXMKICAgIGZyYW1lX2RpZyAtMQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3VmaXhlZG54bV9mcm9tX2J5dGVzKGE6IGJ5dGVzKSAtPiBieXRlczoKdmVyaWZ5X3VmaXhlZG54bV9mcm9tX2J5dGVzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI5Mi0yOTMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X3VmaXhlZG54bV9mcm9tX2J5dGVzKGE6IGJ5dGVzKTogVUZpeGVkTnhNPDMyLCA4PiB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyOTQKICAgIC8vIHJldHVybiBpbnRlcnByZXRBc0FyYzQ8VUZpeGVkTnhNPDMyLCA4Pj4oYSkKICAgIGZyYW1lX2RpZyAtMQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2JpZ3VmaXhlZG54bV9mcm9tX2J5dGVzKGE6IGJ5dGVzKSAtPiBieXRlczoKdmVyaWZ5X2JpZ3VmaXhlZG54bV9mcm9tX2J5dGVzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI5Ni0yOTcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2JpZ3VmaXhlZG54bV9mcm9tX2J5dGVzKGE6IGJ5dGVzKTogVUZpeGVkTnhNPDI1NiwgMTY+IHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI5OAogICAgLy8gcmV0dXJuIGludGVycHJldEFzQXJjNDxVRml4ZWROeE08MjU2LCAxNj4+KGEpCiAgICBmcmFtZV9kaWcgLTEKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV91Zml4ZWRueG1fZnJvbV9sb2coYTogYnl0ZXMpIC0+IGJ5dGVzOgp2ZXJpZnlfdWZpeGVkbnhtX2Zyb21fbG9nOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMwMC0zMDEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X3VmaXhlZG54bV9mcm9tX2xvZyhhOiBieXRlcyk6IFVGaXhlZE54TTwzMiwgOD4gewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzAyCiAgICAvLyByZXR1cm4gaW50ZXJwcmV0QXNBcmM0PFVGaXhlZE54TTwzMiwgOD4+KGEsICdsb2cnKQogICAgZnJhbWVfZGlnIC0xCiAgICBleHRyYWN0IDQgMAogICAgZnJhbWVfZGlnIC0xCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEJ5dGVzIGhhcyB2YWxpZCBwcmVmaXgKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9iaWd1Zml4ZWRueG1fZnJvbV9sb2coYTogYnl0ZXMpIC0+IGJ5dGVzOgp2ZXJpZnlfYmlndWZpeGVkbnhtX2Zyb21fbG9nOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMwNC0zMDUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2JpZ3VmaXhlZG54bV9mcm9tX2xvZyhhOiBieXRlcyk6IFVGaXhlZE54TTwyNTYsIDE2PiB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMDYKICAgIC8vIHJldHVybiBpbnRlcnByZXRBc0FyYzQ8VUZpeGVkTnhNPDI1NiwgMTY+PihhLCAnbG9nJykKICAgIGZyYW1lX2RpZyAtMQogICAgZXh0cmFjdCA0IDAKICAgIGZyYW1lX2RpZyAtMQogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBCeXRlcyBoYXMgdmFsaWQgcHJlZml4CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfc3RyaW5nX2luaXQoYTogYnl0ZXMpIC0+IGJ5dGVzOgp2ZXJpZnlfc3RyaW5nX2luaXQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzA4LTMwOQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfc3RyaW5nX2luaXQoYTogc3RyaW5nKTogU3RyIHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMxMAogICAgLy8gY29uc3QgcmVzdWx0ID0gbmV3IFN0cihgSGVsbG8sICR7YX1gKQogICAgcHVzaGJ5dGVzICJIZWxsbywgIgogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzExCiAgICAvLyByZXR1cm4gcmVzdWx0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfc3RyaW5nX2FkZChhOiBieXRlcywgYjogYnl0ZXMpIC0+IGJ5dGVzOgp2ZXJpZnlfc3RyaW5nX2FkZDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMTMtMzE0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9zdHJpbmdfYWRkKGE6IFN0ciwgYjogU3RyKTogU3RyIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMxNQogICAgLy8gY29uc3QgcmVzdWx0ID0gYS5uYXRpdmUuY29uY2F0KGIubmF0aXZlKQogICAgZnJhbWVfZGlnIC0yCiAgICBleHRyYWN0IDIgMAogICAgZnJhbWVfZGlnIC0xCiAgICBleHRyYWN0IDIgMAogICAgY29uY2F0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzE2CiAgICAvLyByZXR1cm4gbmV3IFN0cihyZXN1bHQpCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3N0cmluZ19lcShhOiBieXRlcywgYjogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X3N0cmluZ19lcToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMTgtMzE5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9zdHJpbmdfZXEoYTogU3RyLCBiOiBTdHIpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMyMAogICAgLy8gcmV0dXJuIGEgPT09IGIKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICA9PQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3N0cmluZ19ieXRlcyhhOiBieXRlcykgLT4gYnl0ZXM6CnZlcmlmeV9zdHJpbmdfYnl0ZXM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzIyLTMyMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfc3RyaW5nX2J5dGVzKGE6IHN0cmluZyk6IGJ5dGVzIHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMyNAogICAgLy8gY29uc3QgcmVzdWx0ID0gbmV3IFN0cihhKQogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMyNQogICAgLy8gcmV0dXJuIHJlc3VsdC5ieXRlcwogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3N0cmluZ19mcm9tX2J5dGVzKGE6IGJ5dGVzKSAtPiBieXRlczoKdmVyaWZ5X3N0cmluZ19mcm9tX2J5dGVzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMyNy0zMjgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X3N0cmluZ19mcm9tX2J5dGVzKGE6IGJ5dGVzKTogU3RyIHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMyOQogICAgLy8gcmV0dXJuIGludGVycHJldEFzQXJjNDxTdHI+KGEpCiAgICBmcmFtZV9kaWcgLTEKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9zdHJpbmdfZnJvbV9sb2coYTogYnl0ZXMpIC0+IGJ5dGVzOgp2ZXJpZnlfc3RyaW5nX2Zyb21fbG9nOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMzMS0zMzIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X3N0cmluZ19mcm9tX2xvZyhhOiBieXRlcyk6IFN0ciB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMzMKICAgIC8vIHJldHVybiBpbnRlcnByZXRBc0FyYzQ8U3RyPihhLCAnbG9nJykKICAgIGZyYW1lX2RpZyAtMQogICAgZXh0cmFjdCA0IDAKICAgIGZyYW1lX2RpZyAtMQogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBCeXRlcyBoYXMgdmFsaWQgcHJlZml4CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYm9vbF9ieXRlcyhhOiBieXRlcykgLT4gYnl0ZXM6CnZlcmlmeV9ib29sX2J5dGVzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMzNS0zMzYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2Jvb2xfYnl0ZXMoYTogQm9vbCk6IGJ5dGVzIHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMzNwogICAgLy8gcmV0dXJuIGEuYnl0ZXMKICAgIGZyYW1lX2RpZyAtMQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2Jvb2xfZnJvbV9ieXRlcyhhOiBieXRlcykgLT4gYnl0ZXM6CnZlcmlmeV9ib29sX2Zyb21fYnl0ZXM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzM5LTM0MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYm9vbF9mcm9tX2J5dGVzKGE6IGJ5dGVzKTogQm9vbCB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozNDEKICAgIC8vIHJldHVybiBpbnRlcnByZXRBc0FyYzQ8Qm9vbD4oYSkKICAgIGZyYW1lX2RpZyAtMQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2Jvb2xfZnJvbV9sb2coYTogYnl0ZXMpIC0+IGJ5dGVzOgp2ZXJpZnlfYm9vbF9mcm9tX2xvZzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozNDMtMzQ0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9ib29sX2Zyb21fbG9nKGE6IGJ5dGVzKTogQm9vbCB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozNDUKICAgIC8vIHJldHVybiBpbnRlcnByZXRBc0FyYzQ8Qm9vbD4oYSwgJ2xvZycpCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgNCAwCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXMgaGFzIHZhbGlkIHByZWZpeAogICAgcmV0c3ViCg==", - "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCgp0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC5jbGVhclN0YXRlUHJvZ3JhbToKICAgIHB1c2hpbnQgMSAvLyAxCiAgICByZXR1cm4K" + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSA4IDY0IDAKICAgIGJ5dGVjYmxvY2sgMHgxNTFmN2M3NSAweDAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0A2MAogICAgcHVzaGJ5dGVzcyAweDk2ZjE0MTE2IDB4ZWQ2NjYwOTYgMHgyY2EwMzUyYiAweDg1OTA3ZDQwIDB4NGViMmFmNGEgMHgyY2JlYzQ1YiAweDA3NjY2ZmQ5IDB4MzcwYmFiZDMgMHgyYjZiM2VmMCAweDI3ZTIxYTk4IDB4MzM5ZGE5N2MgMHg3ODk4ZWQ5NyAweDFmMTMwY2VjIDB4Yzc0ODY2NGUgMHhhMmJhYzE0YiAweDdhNDYwY2IxIDB4ZGNhYjFmMDEgMHg5N2Q5MDY0ZCAweGNlMDZjMmEwIDB4N2MxMWUzNzUgMHhkY2RiY2VlMCAweDc3YTRiNjhkIDB4NGY1NDA2MjYgMHgwOTVhZWQ0MSAweGRmNzhjZGM2IDB4ZTNiN2U5MTggMHg1NTMzNzAwOCAweDliYjFjZDY2IDB4ODE0ODRkOWQgMHg3OWU5Y2IwMyAweDlhMDNkZjEwIDB4ZDNmMGU0NGIgMHg2NzNkYjJiZCAweDk4MmRiMjMzIDB4YWZmYmRmMGUgMHg4ZTRhMzBmNyAweDI4OGFmNzZlIDB4OGJkODRhMDQgMHhmY2Q1NWUxZiAweDBmMTU3NGZlIDB4YjJjYjEzYmUgMHhkMDU5ZWVhNyAweDRjYzRjMTU3IDB4M2QxN2FjNmUgMHhmN2YzZDVmYyAweGY4YzhmOGQ1IDB4NDNmNzE2MmEgMHg0MmUwOTA3NSAweGQ5NTZmNTc1IDB4NmMwMTYwZGYgMHhhODkwMTUwYiAweDBiMmY0YzNmIDB4OWRiOWQzMjcgMHhlNGQ5NTBhMSAweGI2MDVlODBjIC8vIG1ldGhvZCAidmVyaWZ5X3VpbnRuX3VpbnRuX2VxKGJ5dGVbXSxieXRlW10pYm9vbCIsIG1ldGhvZCAidmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2VxKGJ5dGVbXSxieXRlW10pYm9vbCIsIG1ldGhvZCAidmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX2VxKGJ5dGVbXSxieXRlW10pYm9vbCIsIG1ldGhvZCAidmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX2VxKGJ5dGVbXSxieXRlW10pYm9vbCIsIG1ldGhvZCAidmVyaWZ5X2J5dGVfYnl0ZV9lcShieXRlW10sYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV91aW50bl91aW50bl9uZShieXRlW10sYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV9iaWd1aW50bl91aW50bl9uZShieXRlW10sYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV91aW50bl9iaWd1aW50bl9uZShieXRlW10sYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9uZShieXRlW10sYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV9ieXRlX2J5dGVfbmUoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfdWludG5fdWludG5fbHQoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfYmlndWludG5fdWludG5fbHQoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfdWludG5fYmlndWludG5fbHQoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfYmlndWludG5fYmlndWludG5fbHQoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfYnl0ZV9ieXRlX2x0KGJ5dGVbXSxieXRlW10pYm9vbCIsIG1ldGhvZCAidmVyaWZ5X3VpbnRuX3VpbnRuX2xlKGJ5dGVbXSxieXRlW10pYm9vbCIsIG1ldGhvZCAidmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2xlKGJ5dGVbXSxieXRlW10pYm9vbCIsIG1ldGhvZCAidmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX2xlKGJ5dGVbXSxieXRlW10pYm9vbCIsIG1ldGhvZCAidmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX2xlKGJ5dGVbXSxieXRlW10pYm9vbCIsIG1ldGhvZCAidmVyaWZ5X2J5dGVfYnl0ZV9sZShieXRlW10sYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV91aW50bl91aW50bl9ndChieXRlW10sYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV9iaWd1aW50bl91aW50bl9ndChieXRlW10sYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV91aW50bl9iaWd1aW50bl9ndChieXRlW10sYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9ndChieXRlW10sYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV9ieXRlX2J5dGVfZ3QoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfdWludG5fdWludG5fZ2UoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfYmlndWludG5fdWludG5fZ2UoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfdWludG5fYmlndWludG5fZ2UoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfYmlndWludG5fYmlndWludG5fZ2UoYnl0ZVtdLGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfYnl0ZV9ieXRlX2dlKGJ5dGVbXSxieXRlW10pYm9vbCIsIG1ldGhvZCAidmVyaWZ5X3VpbnRuX2luaXQoYnl0ZVtdKXVpbnQzMiIsIG1ldGhvZCAidmVyaWZ5X2JpZ3VpbnRuX2luaXQoYnl0ZVtdKXVpbnQyNTYiLCBtZXRob2QgInZlcmlmeV9ieXRlX2luaXQoYnl0ZVtdKWJ5dGUiLCBtZXRob2QgInZlcmlmeV91aW50bl9mcm9tX2J5dGVzKGJ5dGVbXSl1aW50MzIiLCBtZXRob2QgInZlcmlmeV9iaWd1aW50bl9mcm9tX2J5dGVzKGJ5dGVbXSl1aW50MjU2IiwgbWV0aG9kICJ2ZXJpZnlfYnl0ZV9mcm9tX2J5dGVzKGJ5dGVbXSlieXRlIiwgbWV0aG9kICJ2ZXJpZnlfdWludG5fZnJvbV9sb2coYnl0ZVtdKXVpbnQzMiIsIG1ldGhvZCAidmVyaWZ5X2JpZ3VpbnRuX2Zyb21fbG9nKGJ5dGVbXSl1aW50MjU2IiwgbWV0aG9kICJ2ZXJpZnlfYnl0ZV9mcm9tX2xvZyhieXRlW10pYnl0ZSIsIG1ldGhvZCAidmVyaWZ5X3VmaXhlZG54bV9ieXRlcyh1Zml4ZWQzMng4KWJ5dGVbXSIsIG1ldGhvZCAidmVyaWZ5X2JpZ3VmaXhlZG54bV9ieXRlcyh1Zml4ZWQyNTZ4MTYpYnl0ZVtdIiwgbWV0aG9kICJ2ZXJpZnlfdWZpeGVkbnhtX2Zyb21fYnl0ZXMoYnl0ZVtdKXVmaXhlZDMyeDgiLCBtZXRob2QgInZlcmlmeV9iaWd1Zml4ZWRueG1fZnJvbV9ieXRlcyhieXRlW10pdWZpeGVkMjU2eDE2IiwgbWV0aG9kICJ2ZXJpZnlfdWZpeGVkbnhtX2Zyb21fbG9nKGJ5dGVbXSl1Zml4ZWQzMng4IiwgbWV0aG9kICJ2ZXJpZnlfYmlndWZpeGVkbnhtX2Zyb21fbG9nKGJ5dGVbXSl1Zml4ZWQyNTZ4MTYiLCBtZXRob2QgInZlcmlmeV9zdHJpbmdfaW5pdChzdHJpbmcpc3RyaW5nIiwgbWV0aG9kICJ2ZXJpZnlfc3RyaW5nX2FkZChzdHJpbmcsc3RyaW5nKXN0cmluZyIsIG1ldGhvZCAidmVyaWZ5X3N0cmluZ19lcShzdHJpbmcsc3RyaW5nKWJvb2wiLCBtZXRob2QgInZlcmlmeV9zdHJpbmdfYnl0ZXMoc3RyaW5nKWJ5dGVbXSIsIG1ldGhvZCAidmVyaWZ5X3N0cmluZ19mcm9tX2J5dGVzKGJ5dGVbXSlzdHJpbmciLCBtZXRob2QgInZlcmlmeV9zdHJpbmdfZnJvbV9sb2coYnl0ZVtdKXN0cmluZyIsIG1ldGhvZCAidmVyaWZ5X2Jvb2xfYnl0ZXMoYm9vbClieXRlW10iLCBtZXRob2QgInZlcmlmeV9ib29sX2Zyb21fYnl0ZXMoYnl0ZVtdKWJvb2wiLCBtZXRob2QgInZlcmlmeV9ib29sX2Zyb21fbG9nKGJ5dGVbXSlib29sIiwgbWV0aG9kICJ2ZXJpZnlfZW1pdChzdHJpbmcsdWludDUxMix1aW50NjQsYnl0ZVtdLHVpbnQ2NCxib29sLGJ5dGVbXSxzdHJpbmcsdWludDY0LHVpbnQyNTYsdWZpeGVkMzJ4OCx1Zml4ZWQyNTZ4MTYsYm9vbCxieXRlW10sYnl0ZVtdLGJ5dGVbXSl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl92ZXJpZnlfdWludG5fdWludG5fZXFfcm91dGVAMyBtYWluX3ZlcmlmeV9iaWd1aW50bl91aW50bl9lcV9yb3V0ZUA0IG1haW5fdmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX2VxX3JvdXRlQDUgbWFpbl92ZXJpZnlfYmlndWludG5fYmlndWludG5fZXFfcm91dGVANiBtYWluX3ZlcmlmeV9ieXRlX2J5dGVfZXFfcm91dGVANyBtYWluX3ZlcmlmeV91aW50bl91aW50bl9uZV9yb3V0ZUA4IG1haW5fdmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX25lX3JvdXRlQDkgbWFpbl92ZXJpZnlfdWludG5fYmlndWludG5fbmVfcm91dGVAMTAgbWFpbl92ZXJpZnlfYmlndWludG5fYmlndWludG5fbmVfcm91dGVAMTEgbWFpbl92ZXJpZnlfYnl0ZV9ieXRlX25lX3JvdXRlQDEyIG1haW5fdmVyaWZ5X3VpbnRuX3VpbnRuX2x0X3JvdXRlQDEzIG1haW5fdmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2x0X3JvdXRlQDE0IG1haW5fdmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX2x0X3JvdXRlQDE1IG1haW5fdmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX2x0X3JvdXRlQDE2IG1haW5fdmVyaWZ5X2J5dGVfYnl0ZV9sdF9yb3V0ZUAxNyBtYWluX3ZlcmlmeV91aW50bl91aW50bl9sZV9yb3V0ZUAxOCBtYWluX3ZlcmlmeV9iaWd1aW50bl91aW50bl9sZV9yb3V0ZUAxOSBtYWluX3ZlcmlmeV91aW50bl9iaWd1aW50bl9sZV9yb3V0ZUAyMCBtYWluX3ZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9sZV9yb3V0ZUAyMSBtYWluX3ZlcmlmeV9ieXRlX2J5dGVfbGVfcm91dGVAMjIgbWFpbl92ZXJpZnlfdWludG5fdWludG5fZ3Rfcm91dGVAMjMgbWFpbl92ZXJpZnlfYmlndWludG5fdWludG5fZ3Rfcm91dGVAMjQgbWFpbl92ZXJpZnlfdWludG5fYmlndWludG5fZ3Rfcm91dGVAMjUgbWFpbl92ZXJpZnlfYmlndWludG5fYmlndWludG5fZ3Rfcm91dGVAMjYgbWFpbl92ZXJpZnlfYnl0ZV9ieXRlX2d0X3JvdXRlQDI3IG1haW5fdmVyaWZ5X3VpbnRuX3VpbnRuX2dlX3JvdXRlQDI4IG1haW5fdmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2dlX3JvdXRlQDI5IG1haW5fdmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX2dlX3JvdXRlQDMwIG1haW5fdmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX2dlX3JvdXRlQDMxIG1haW5fdmVyaWZ5X2J5dGVfYnl0ZV9nZV9yb3V0ZUAzMiBtYWluX3ZlcmlmeV91aW50bl9pbml0X3JvdXRlQDMzIG1haW5fdmVyaWZ5X2JpZ3VpbnRuX2luaXRfcm91dGVAMzQgbWFpbl92ZXJpZnlfYnl0ZV9pbml0X3JvdXRlQDM1IG1haW5fdmVyaWZ5X3VpbnRuX2Zyb21fYnl0ZXNfcm91dGVAMzYgbWFpbl92ZXJpZnlfYmlndWludG5fZnJvbV9ieXRlc19yb3V0ZUAzNyBtYWluX3ZlcmlmeV9ieXRlX2Zyb21fYnl0ZXNfcm91dGVAMzggbWFpbl92ZXJpZnlfdWludG5fZnJvbV9sb2dfcm91dGVAMzkgbWFpbl92ZXJpZnlfYmlndWludG5fZnJvbV9sb2dfcm91dGVANDAgbWFpbl92ZXJpZnlfYnl0ZV9mcm9tX2xvZ19yb3V0ZUA0MSBtYWluX3ZlcmlmeV91Zml4ZWRueG1fYnl0ZXNfcm91dGVANDIgbWFpbl92ZXJpZnlfYmlndWZpeGVkbnhtX2J5dGVzX3JvdXRlQDQzIG1haW5fdmVyaWZ5X3VmaXhlZG54bV9mcm9tX2J5dGVzX3JvdXRlQDQ0IG1haW5fdmVyaWZ5X2JpZ3VmaXhlZG54bV9mcm9tX2J5dGVzX3JvdXRlQDQ1IG1haW5fdmVyaWZ5X3VmaXhlZG54bV9mcm9tX2xvZ19yb3V0ZUA0NiBtYWluX3ZlcmlmeV9iaWd1Zml4ZWRueG1fZnJvbV9sb2dfcm91dGVANDcgbWFpbl92ZXJpZnlfc3RyaW5nX2luaXRfcm91dGVANDggbWFpbl92ZXJpZnlfc3RyaW5nX2FkZF9yb3V0ZUA0OSBtYWluX3ZlcmlmeV9zdHJpbmdfZXFfcm91dGVANTAgbWFpbl92ZXJpZnlfc3RyaW5nX2J5dGVzX3JvdXRlQDUxIG1haW5fdmVyaWZ5X3N0cmluZ19mcm9tX2J5dGVzX3JvdXRlQDUyIG1haW5fdmVyaWZ5X3N0cmluZ19mcm9tX2xvZ19yb3V0ZUA1MyBtYWluX3ZlcmlmeV9ib29sX2J5dGVzX3JvdXRlQDU0IG1haW5fdmVyaWZ5X2Jvb2xfZnJvbV9ieXRlc19yb3V0ZUA1NSBtYWluX3ZlcmlmeV9ib29sX2Zyb21fbG9nX3JvdXRlQDU2IG1haW5fdmVyaWZ5X2VtaXRfcm91dGVANTcKCm1haW5fYWZ0ZXJfaWZfZWxzZUA2NDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18zIC8vIDAKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfZW1pdF9yb3V0ZUA1NzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozNDkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNwogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgOAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgOQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMTAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDExCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxMgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMTMKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDE0CiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMTUKICAgIGR1cAogICAgaW50Y18zIC8vIDAKICAgIGV4dHJhY3RfdWludDE2CiAgICBkaWcgMQogICAgcHVzaGludCAyIC8vIDIKICAgIGV4dHJhY3RfdWludDE2CiAgICBzdWJzdHJpbmczCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMTUKICAgIGR1cAogICAgcHVzaGludCAyIC8vIDIKICAgIGV4dHJhY3RfdWludDE2CiAgICBkaWcgMQogICAgbGVuCiAgICBzdWJzdHJpbmczCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM0OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2VtaXQKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2Jvb2xfZnJvbV9sb2dfcm91dGVANTY6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzQzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzQzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYm9vbF9mcm9tX2xvZwogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYm9vbF9mcm9tX2J5dGVzX3JvdXRlQDU1OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMzOQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMzOQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2Jvb2xfYnl0ZXNfcm91dGVANTQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzM1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMzUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBkdXAKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfc3RyaW5nX2Zyb21fbG9nX3JvdXRlQDUzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMzMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMzMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3N0cmluZ19mcm9tX2xvZwogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfc3RyaW5nX2Zyb21fYnl0ZXNfcm91dGVANTI6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzI3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzI3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfc3RyaW5nX2J5dGVzX3JvdXRlQDUxOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMyMgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMyMgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3N0cmluZ19ieXRlcwogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X3N0cmluZ19lcV9yb3V0ZUA1MDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMTgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMxOAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3N0cmluZ19lcQogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzMgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X3N0cmluZ19hZGRfcm91dGVANDk6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzEzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMTMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9zdHJpbmdfYWRkCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9zdHJpbmdfaW5pdF9yb3V0ZUA0ODoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMDgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMDgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9zdHJpbmdfaW5pdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYmlndWZpeGVkbnhtX2Zyb21fbG9nX3JvdXRlQDQ3OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMwNAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMwNAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2JpZ3VmaXhlZG54bV9mcm9tX2xvZwogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfdWZpeGVkbnhtX2Zyb21fbG9nX3JvdXRlQDQ2OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMwMAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMwMAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3VmaXhlZG54bV9mcm9tX2xvZwogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYmlndWZpeGVkbnhtX2Zyb21fYnl0ZXNfcm91dGVANDU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Mjk2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Mjk2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfdWZpeGVkbnhtX2Zyb21fYnl0ZXNfcm91dGVANDQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjkyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjkyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYmlndWZpeGVkbnhtX2J5dGVzX3JvdXRlQDQzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI4OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Mjg4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X3VmaXhlZG54bV9ieXRlc19yb3V0ZUA0MjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyODQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI4NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9ieXRlX2Zyb21fbG9nX3JvdXRlQDQxOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI4MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI4MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2J5dGVfZnJvbV9sb2cKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2JpZ3VpbnRuX2Zyb21fbG9nX3JvdXRlQDQwOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI3NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI3NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2JpZ3VpbnRuX2Zyb21fbG9nCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV91aW50bl9mcm9tX2xvZ19yb3V0ZUAzOToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNzIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNzIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV91aW50bl9mcm9tX2xvZwogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYnl0ZV9mcm9tX2J5dGVzX3JvdXRlQDM4OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI2OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI2OAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2JpZ3VpbnRuX2Zyb21fYnl0ZXNfcm91dGVAMzc6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjY0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjY0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfdWludG5fZnJvbV9ieXRlc19yb3V0ZUAzNjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNjAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNjAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9ieXRlX2luaXRfcm91dGVAMzU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjU1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjU1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYnl0ZV9pbml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9iaWd1aW50bl9pbml0X3JvdXRlQDM0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI1MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI1MAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2JpZ3VpbnRuX2luaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X3VpbnRuX2luaXRfcm91dGVAMzM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjQ1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjQ1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfdWludG5faW5pdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYnl0ZV9ieXRlX2dlX3JvdXRlQDMyOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIzNwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMzcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9ieXRlX2J5dGVfZ2UKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9nZV9yb3V0ZUAzMToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMjkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjI5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYmlndWludG5fYmlndWludG5fZ2UKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV91aW50bl9iaWd1aW50bl9nZV9yb3V0ZUAzMDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMjEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjIxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfdWludG5fYmlndWludG5fZ2UKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9iaWd1aW50bl91aW50bl9nZV9yb3V0ZUAyOToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMTMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjEzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYmlndWludG5fdWludG5fZ2UKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV91aW50bl91aW50bl9nZV9yb3V0ZUAyODoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMDUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjA1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfdWludG5fdWludG5fZ2UKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9ieXRlX2J5dGVfZ3Rfcm91dGVAMjc6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTk3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE5NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2J5dGVfYnl0ZV9ndAogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzMgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX2d0X3JvdXRlQDI2OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE4OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxODkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9ndAogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzMgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX2d0X3JvdXRlQDI1OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE4MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxODEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV91aW50bl9iaWd1aW50bl9ndAogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzMgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2d0X3JvdXRlQDI0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE3MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxNzMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9iaWd1aW50bl91aW50bl9ndAogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzMgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X3VpbnRuX3VpbnRuX2d0X3JvdXRlQDIzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE2NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxNjUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV91aW50bl91aW50bl9ndAogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzMgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2J5dGVfYnl0ZV9sZV9yb3V0ZUAyMjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxNTcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTU3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYnl0ZV9ieXRlX2xlCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMyAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYmlndWludG5fYmlndWludG5fbGVfcm91dGVAMjE6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTQ5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE0OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX2xlCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMyAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfdWludG5fYmlndWludG5fbGVfcm91dGVAMjA6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTQxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE0MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX2xlCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMyAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYmlndWludG5fdWludG5fbGVfcm91dGVAMTk6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTMzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEzMwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2xlCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMyAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfdWludG5fdWludG5fbGVfcm91dGVAMTg6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTI1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEyNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3VpbnRuX3VpbnRuX2xlCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMyAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYnl0ZV9ieXRlX2x0X3JvdXRlQDE3OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjExNwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMTcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9ieXRlX2J5dGVfbHQKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9sdF9yb3V0ZUAxNjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMDkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTA5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYmlndWludG5fYmlndWludG5fbHQKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV91aW50bl9iaWd1aW50bl9sdF9yb3V0ZUAxNToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMDEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTAxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfdWludG5fYmlndWludG5fbHQKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9iaWd1aW50bl91aW50bl9sdF9yb3V0ZUAxNDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo5MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo5MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2x0CiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMyAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfdWludG5fdWludG5fbHRfcm91dGVAMTM6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV91aW50bl91aW50bl9sdAogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzMgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2J5dGVfYnl0ZV9uZV9yb3V0ZUAxMjoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo3NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo3NwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2J5dGVfYnl0ZV9uZQogICAgYnl0ZWNfMSAvLyAweDAwCiAgICBpbnRjXzMgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fdmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX25lX3JvdXRlQDExOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjY5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjY5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYmlndWludG5fYmlndWludG5fbmUKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV91aW50bl9iaWd1aW50bl9uZV9yb3V0ZUAxMDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo2MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo2MQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX25lCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMyAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYmlndWludG5fdWludG5fbmVfcm91dGVAOToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo1MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo1MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX25lCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMyAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfdWludG5fdWludG5fbmVfcm91dGVAODoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBleHRyYWN0IDIgMAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZXh0cmFjdCAyIDAKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3VpbnRuX3VpbnRuX25lCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMyAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl92ZXJpZnlfYnl0ZV9ieXRlX2VxX3JvdXRlQDc6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHZlcmlmeV9ieXRlX2J5dGVfZXEKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9lcV9yb3V0ZUA2OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYmlndWludG5fYmlndWludG5fZXEKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV91aW50bl9iaWd1aW50bl9lcV9yb3V0ZUA1OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfdWludG5fYmlndWludG5fZXEKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV9iaWd1aW50bl91aW50bl9lcV9yb3V0ZUA0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGV4dHJhY3QgMiAwCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBleHRyYWN0IDIgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiB2ZXJpZnlfYmlndWludG5fdWludG5fZXEKICAgIGJ5dGVjXzEgLy8gMHgwMAogICAgaW50Y18zIC8vIDAKICAgIHVuY292ZXIgMgogICAgc2V0Yml0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX3ZlcmlmeV91aW50bl91aW50bl9lcV9yb3V0ZUAzOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZXh0cmFjdCAyIDAKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGV4dHJhY3QgMiAwCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgdmVyaWZ5X3VpbnRuX3VpbnRuX2VxCiAgICBieXRlY18xIC8vIDB4MDAKICAgIGludGNfMyAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdANjA6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzRQcmltaXRpdmVPcHNDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VANjQKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3VpbnRuX3VpbnRuX2VxKGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfdWludG5fdWludG5fZXE6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NS02CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV91aW50bl91aW50bl9lcShhOiBieXRlcywgYjogYnl0ZXMpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjkKICAgIC8vIGNvbnN0IGFVaW50TiA9IG5ldyBVaW50Tjw2ND4oYUJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMSAvLyA4CiAgICBiemVybwogICAgZnJhbWVfZGlnIC0yCiAgICBkaWcgMQogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMAogICAgLy8gY29uc3QgYlVpbnROID0gbmV3IFVpbnROPDY0PihiQmlndWludCkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgZnJhbWVfZGlnIC0xCiAgICB1bmNvdmVyIDIKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTEKICAgIC8vIHJldHVybiBhVWludE4gPT09IGJVaW50TgogICAgPT0KICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9iaWd1aW50bl91aW50bl9lcShhOiBieXRlcywgYjogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2VxOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEzLTE0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9iaWd1aW50bl91aW50bl9lcShhOiBieXRlcywgYjogYnl0ZXMpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE3CiAgICAvLyBjb25zdCBhVWludE4gPSBuZXcgVWludE48NTEyPihhQmlndWludCkKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpbnRjXzIgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMiAvLyA2NAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxOAogICAgLy8gY29uc3QgYlVpbnROID0gbmV3IFVpbnROPDY0PihiQmlndWludCkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18xIC8vIDgKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTEKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTkKICAgIC8vIHJldHVybiBhVWludE4uYnl0ZXMuZXF1YWxzKGJVaW50Ti5ieXRlcykKICAgID09CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfdWludG5fYmlndWludG5fZXEoYTogYnl0ZXMsIGI6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV91aW50bl9iaWd1aW50bl9lcToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMS0yMgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfdWludG5fYmlndWludG5fZXEoYTogYnl0ZXMsIGI6IGJ5dGVzKTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNQogICAgLy8gY29uc3QgYVVpbnROID0gbmV3IFVpbnROPDY0PihhQmlndWludCkKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18xIC8vIDgKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTIKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjYKICAgIC8vIGNvbnN0IGJVaW50TiA9IG5ldyBVaW50Tjw1MTI+KGJCaWd1aW50KQogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGludGNfMiAvLyA2NAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18yIC8vIDY0CiAgICBiemVybwogICAgZnJhbWVfZGlnIC0xCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI3CiAgICAvLyByZXR1cm4gYVVpbnROLmJ5dGVzLmVxdWFscyhiVWludE4uYnl0ZXMpCiAgICA9PQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX2VxKGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfYmlndWludG5fYmlndWludG5fZXE6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjktMzAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX2VxKGE6IGJ5dGVzLCBiOiBieXRlcyk6IGJvb2xlYW4gewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzMKICAgIC8vIGNvbnN0IGFVaW50TiA9IG5ldyBVaW50Tjw1MTI+KGFCaWd1aW50KQogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIGludGNfMiAvLyA2NAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18yIC8vIDY0CiAgICBiemVybwogICAgZnJhbWVfZGlnIC0yCiAgICBkaWcgMQogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozNAogICAgLy8gY29uc3QgYlVpbnROID0gbmV3IFVpbnROPDUxMj4oYkJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgaW50Y18yIC8vIDY0CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBmcmFtZV9kaWcgLTEKICAgIHVuY292ZXIgMgogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozNQogICAgLy8gcmV0dXJuIGFVaW50TiA9PT0gYlVpbnROCiAgICA9PQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2J5dGVfYnl0ZV9lcShhOiBieXRlcywgYjogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X2J5dGVfYnl0ZV9lcToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozNy0zOAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYnl0ZV9ieXRlX2VxKGE6IGJ5dGVzLCBiOiBieXRlcyk6IGJvb2xlYW4gewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDEKICAgIC8vIGNvbnN0IGFCeXRlID0gbmV3IEJ5dGUoYUJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMCAvLyAxCiAgICBiemVybwogICAgZnJhbWVfZGlnIC0yCiAgICBkaWcgMQogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0MgogICAgLy8gY29uc3QgYkJ5dGUgPSBuZXcgQnl0ZShiQmlndWludCkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgZnJhbWVfZGlnIC0xCiAgICB1bmNvdmVyIDIKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NDMKICAgIC8vIHJldHVybiBhQnl0ZSA9PT0gYkJ5dGUKICAgID09CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfdWludG5fdWludG5fbmUoYTogYnl0ZXMsIGI6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV91aW50bl91aW50bl9uZToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0NS00NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfdWludG5fdWludG5fbmUoYTogYnl0ZXMsIGI6IGJ5dGVzKTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo0OQogICAgLy8gY29uc3QgYVVpbnROID0gbmV3IFVpbnROPDY0PihhQmlndWludCkKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18xIC8vIDgKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTIKICAgIGRpZyAxCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjUwCiAgICAvLyBjb25zdCBiVWludE4gPSBuZXcgVWludE48NjQ+KGJCaWd1aW50KQogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGludGNfMSAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBmcmFtZV9kaWcgLTEKICAgIHVuY292ZXIgMgogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo1MQogICAgLy8gcmV0dXJuIGFVaW50TiAhPT0gYlVpbnROCiAgICAhPQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX25lKGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfYmlndWludG5fdWludG5fbmU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NTMtNTQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX25lKGE6IGJ5dGVzLCBiOiBieXRlcyk6IGJvb2xlYW4gewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NTcKICAgIC8vIGNvbnN0IGFVaW50TiA9IG5ldyBVaW50Tjw1MTI+KGFCaWd1aW50KQogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIGludGNfMiAvLyA2NAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18yIC8vIDY0CiAgICBiemVybwogICAgZnJhbWVfZGlnIC0yCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjU4CiAgICAvLyBjb25zdCBiVWludE4gPSBuZXcgVWludE48NjQ+KGJCaWd1aW50KQogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGludGNfMSAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzEgLy8gOAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMQogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo1OQogICAgLy8gcmV0dXJuICFhVWludE4uYnl0ZXMuZXF1YWxzKGJVaW50Ti5ieXRlcykKICAgID09CiAgICAhCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfdWludG5fYmlndWludG5fbmUoYTogYnl0ZXMsIGI6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV91aW50bl9iaWd1aW50bl9uZToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo2MS02MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfdWludG5fYmlndWludG5fbmUoYTogYnl0ZXMsIGI6IGJ5dGVzKTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo2NQogICAgLy8gY29uc3QgYVVpbnROID0gbmV3IFVpbnROPDY0PihhQmlndWludCkKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18xIC8vIDgKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTIKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NjYKICAgIC8vIGNvbnN0IGJVaW50TiA9IG5ldyBVaW50Tjw1MTI+KGJCaWd1aW50KQogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGludGNfMiAvLyA2NAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18yIC8vIDY0CiAgICBiemVybwogICAgZnJhbWVfZGlnIC0xCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjY3CiAgICAvLyByZXR1cm4gIWFVaW50Ti5ieXRlcy5lcXVhbHMoYlVpbnROLmJ5dGVzKQogICAgPT0KICAgICEKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9uZShhOiBieXRlcywgYjogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX25lOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjY5LTcwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9uZShhOiBieXRlcywgYjogYnl0ZXMpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjczCiAgICAvLyBjb25zdCBhVWludE4gPSBuZXcgVWludE48NTEyPihhQmlndWludCkKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpbnRjXzIgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMiAvLyA2NAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgZGlnIDEKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NzQKICAgIC8vIGNvbnN0IGJVaW50TiA9IG5ldyBVaW50Tjw1MTI+KGJCaWd1aW50KQogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGludGNfMiAvLyA2NAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgZnJhbWVfZGlnIC0xCiAgICB1bmNvdmVyIDIKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NzUKICAgIC8vIHJldHVybiBhVWludE4gIT09IGJVaW50TgogICAgIT0KICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9ieXRlX2J5dGVfbmUoYTogYnl0ZXMsIGI6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV9ieXRlX2J5dGVfbmU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6NzctNzgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2J5dGVfYnl0ZV9uZShhOiBieXRlcywgYjogYnl0ZXMpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjgxCiAgICAvLyBjb25zdCBhQnl0ZSA9IG5ldyBCeXRlKGFCaWd1aW50KQogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIGludGNfMCAvLyAxCiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzAgLy8gMQogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgZGlnIDEKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODIKICAgIC8vIGNvbnN0IGJCeXRlID0gbmV3IEJ5dGUoYkJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGZyYW1lX2RpZyAtMQogICAgdW5jb3ZlciAyCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjgzCiAgICAvLyByZXR1cm4gYUJ5dGUgIT09IGJCeXRlCiAgICAhPQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3VpbnRuX3VpbnRuX2x0KGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfdWludG5fdWludG5fbHQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODUtODYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X3VpbnRuX3VpbnRuX2x0KGE6IGJ5dGVzLCBiOiBieXRlcyk6IGJvb2xlYW4gewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6ODkKICAgIC8vIGNvbnN0IGFVaW50TiA9IG5ldyBVaW50Tjw2ND4oYUJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMSAvLyA4CiAgICBiemVybwogICAgZnJhbWVfZGlnIC0yCiAgICBkaWcgMQogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo5MAogICAgLy8gY29uc3QgYlVpbnROID0gbmV3IFVpbnROPDY0PihiQmlndWludCkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgZnJhbWVfZGlnIC0xCiAgICB1bmNvdmVyIDIKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OTEKICAgIC8vIHJldHVybiBhVWludE4ubmF0aXZlIDwgYlVpbnROLm5hdGl2ZQogICAgc3dhcAogICAgYnRvaQogICAgc3dhcAogICAgYnRvaQogICAgPAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2x0KGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfYmlndWludG5fdWludG5fbHQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OTMtOTQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2x0KGE6IGJ5dGVzLCBiOiBieXRlcyk6IGJvb2xlYW4gewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OTcKICAgIC8vIGNvbnN0IGFVaW50TiA9IG5ldyBVaW50Tjw1MTI+KGFCaWd1aW50KQogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIGludGNfMiAvLyA2NAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18yIC8vIDY0CiAgICBiemVybwogICAgZnJhbWVfZGlnIC0yCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjk4CiAgICAvLyBjb25zdCBiVWludE4gPSBuZXcgVWludE48NjQ+KGJCaWd1aW50KQogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGludGNfMSAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzEgLy8gOAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMQogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo5OQogICAgLy8gcmV0dXJuIGFVaW50Ti5uYXRpdmUgPCBCaWdVaW50KGJVaW50Ti5uYXRpdmUpCiAgICBidG9pCiAgICBpdG9iCiAgICBiPAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX2x0KGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfdWludG5fYmlndWludG5fbHQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTAxLTEwMgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfdWludG5fYmlndWludG5fbHQoYTogYnl0ZXMsIGI6IGJ5dGVzKTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMDUKICAgIC8vIGNvbnN0IGFVaW50TiA9IG5ldyBVaW50Tjw2ND4oYUJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMSAvLyA4CiAgICBiemVybwogICAgZnJhbWVfZGlnIC0yCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEwNgogICAgLy8gY29uc3QgYlVpbnROID0gbmV3IFVpbnROPDUxMj4oYkJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgaW50Y18yIC8vIDY0CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzIgLy8gNjQKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTEKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTA3CiAgICAvLyByZXR1cm4gQmlnVWludChhVWludE4ubmF0aXZlKSA8IGJVaW50Ti5uYXRpdmUKICAgIHN3YXAKICAgIGJ0b2kKICAgIGl0b2IKICAgIGI+CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludG5fYmlndWludG5fbHQoYTogYnl0ZXMsIGI6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9sdDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMDktMTEwCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9sdChhOiBieXRlcywgYjogYnl0ZXMpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjExMwogICAgLy8gY29uc3QgYVVpbnROID0gbmV3IFVpbnROPDUxMj4oYUJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaW50Y18yIC8vIDY0CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzIgLy8gNjQKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTIKICAgIGRpZyAxCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjExNAogICAgLy8gY29uc3QgYlVpbnROID0gbmV3IFVpbnROPDUxMj4oYkJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgaW50Y18yIC8vIDY0CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBmcmFtZV9kaWcgLTEKICAgIHVuY292ZXIgMgogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMTUKICAgIC8vIHJldHVybiBhVWludE4ubmF0aXZlIDwgYlVpbnROLm5hdGl2ZQogICAgYjwKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9ieXRlX2J5dGVfbHQoYTogYnl0ZXMsIGI6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV9ieXRlX2J5dGVfbHQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTE3LTExOAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYnl0ZV9ieXRlX2x0KGE6IGJ5dGVzLCBiOiBieXRlcyk6IGJvb2xlYW4gewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTIxCiAgICAvLyBjb25zdCBhQnl0ZSA9IG5ldyBCeXRlKGFCaWd1aW50KQogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIGludGNfMCAvLyAxCiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzAgLy8gMQogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgZGlnIDEKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTIyCiAgICAvLyBjb25zdCBiQnl0ZSA9IG5ldyBCeXRlKGJCaWd1aW50KQogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGludGNfMCAvLyAxCiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBmcmFtZV9kaWcgLTEKICAgIHVuY292ZXIgMgogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMjMKICAgIC8vIHJldHVybiBhQnl0ZS5uYXRpdmUgPCBiQnl0ZS5uYXRpdmUKICAgIHN3YXAKICAgIGJ0b2kKICAgIHN3YXAKICAgIGJ0b2kKICAgIDwKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV91aW50bl91aW50bl9sZShhOiBieXRlcywgYjogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X3VpbnRuX3VpbnRuX2xlOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEyNS0xMjYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X3VpbnRuX3VpbnRuX2xlKGE6IGJ5dGVzLCBiOiBieXRlcyk6IGJvb2xlYW4gewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTI5CiAgICAvLyBjb25zdCBhVWludE4gPSBuZXcgVWludE48NjQ+KGFCaWd1aW50KQogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIGludGNfMSAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzEgLy8gOAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgZGlnIDEKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTMwCiAgICAvLyBjb25zdCBiVWludE4gPSBuZXcgVWludE48NjQ+KGJCaWd1aW50KQogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGludGNfMSAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBmcmFtZV9kaWcgLTEKICAgIHVuY292ZXIgMgogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMzEKICAgIC8vIHJldHVybiBhVWludE4ubmF0aXZlIDw9IGJVaW50Ti5uYXRpdmUKICAgIHN3YXAKICAgIGJ0b2kKICAgIHN3YXAKICAgIGJ0b2kKICAgIDw9CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYmlndWludG5fdWludG5fbGUoYTogYnl0ZXMsIGI6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV9iaWd1aW50bl91aW50bl9sZToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMzMtMTM0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9iaWd1aW50bl91aW50bl9sZShhOiBieXRlcywgYjogYnl0ZXMpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjEzNwogICAgLy8gY29uc3QgYVVpbnROID0gbmV3IFVpbnROPDUxMj4oYUJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaW50Y18yIC8vIDY0CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzIgLy8gNjQKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTIKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTM4CiAgICAvLyBjb25zdCBiVWludE4gPSBuZXcgVWludE48NjQ+KGJCaWd1aW50KQogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGludGNfMSAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzEgLy8gOAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMQogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxMzkKICAgIC8vIHJldHVybiBhVWludE4ubmF0aXZlIDw9IEJpZ1VpbnQoYlVpbnROLm5hdGl2ZSkKICAgIGJ0b2kKICAgIGl0b2IKICAgIGI8PQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3VpbnRuX2JpZ3VpbnRuX2xlKGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfdWludG5fYmlndWludG5fbGU6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTQxLTE0MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfdWludG5fYmlndWludG5fbGUoYTogYnl0ZXMsIGI6IGJ5dGVzKTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxNDUKICAgIC8vIGNvbnN0IGFVaW50TiA9IG5ldyBVaW50Tjw2ND4oYUJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMSAvLyA4CiAgICBiemVybwogICAgZnJhbWVfZGlnIC0yCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE0NgogICAgLy8gY29uc3QgYlVpbnROID0gbmV3IFVpbnROPDUxMj4oYkJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgaW50Y18yIC8vIDY0CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzIgLy8gNjQKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTEKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTQ3CiAgICAvLyByZXR1cm4gQmlnVWludChhVWludE4ubmF0aXZlKSA8PSBiVWludE4ubmF0aXZlCiAgICBzd2FwCiAgICBidG9pCiAgICBpdG9iCiAgICBiPj0KICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9sZShhOiBieXRlcywgYjogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX2xlOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE0OS0xNTAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX2xlKGE6IGJ5dGVzLCBiOiBieXRlcyk6IGJvb2xlYW4gewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTUzCiAgICAvLyBjb25zdCBhVWludE4gPSBuZXcgVWludE48NTEyPihhQmlndWludCkKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpbnRjXzIgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMiAvLyA2NAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgZGlnIDEKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTU0CiAgICAvLyBjb25zdCBiVWludE4gPSBuZXcgVWludE48NTEyPihiQmlndWludCkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpbnRjXzIgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGZyYW1lX2RpZyAtMQogICAgdW5jb3ZlciAyCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE1NQogICAgLy8gcmV0dXJuIGFVaW50Ti5uYXRpdmUgPD0gYlVpbnROLm5hdGl2ZQogICAgYjw9CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfYnl0ZV9ieXRlX2xlKGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfYnl0ZV9ieXRlX2xlOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE1Ny0xNTgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2J5dGVfYnl0ZV9sZShhOiBieXRlcywgYjogYnl0ZXMpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE2MQogICAgLy8gY29uc3QgYUJ5dGUgPSBuZXcgQnl0ZShhQmlndWludCkKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18wIC8vIDEKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTIKICAgIGRpZyAxCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE2MgogICAgLy8gY29uc3QgYkJ5dGUgPSBuZXcgQnl0ZShiQmlndWludCkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgZnJhbWVfZGlnIC0xCiAgICB1bmNvdmVyIDIKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTYzCiAgICAvLyByZXR1cm4gYUJ5dGUubmF0aXZlIDw9IGJCeXRlLm5hdGl2ZQogICAgc3dhcAogICAgYnRvaQogICAgc3dhcAogICAgYnRvaQogICAgPD0KICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV91aW50bl91aW50bl9ndChhOiBieXRlcywgYjogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X3VpbnRuX3VpbnRuX2d0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE2NS0xNjYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X3VpbnRuX3VpbnRuX2d0KGE6IGJ5dGVzLCBiOiBieXRlcyk6IGJvb2xlYW4gewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTY5CiAgICAvLyBjb25zdCBhVWludE4gPSBuZXcgVWludE48NjQ+KGFCaWd1aW50KQogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIGludGNfMSAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzEgLy8gOAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgZGlnIDEKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTcwCiAgICAvLyBjb25zdCBiVWludE4gPSBuZXcgVWludE48NjQ+KGJCaWd1aW50KQogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGludGNfMSAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBmcmFtZV9kaWcgLTEKICAgIHVuY292ZXIgMgogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxNzEKICAgIC8vIHJldHVybiBhVWludE4ubmF0aXZlID4gYlVpbnROLm5hdGl2ZQogICAgc3dhcAogICAgYnRvaQogICAgc3dhcAogICAgYnRvaQogICAgPgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2d0KGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfYmlndWludG5fdWludG5fZ3Q6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTczLTE3NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYmlndWludG5fdWludG5fZ3QoYTogYnl0ZXMsIGI6IGJ5dGVzKTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxNzcKICAgIC8vIGNvbnN0IGFVaW50TiA9IG5ldyBVaW50Tjw1MTI+KGFCaWd1aW50KQogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIGludGNfMiAvLyA2NAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18yIC8vIDY0CiAgICBiemVybwogICAgZnJhbWVfZGlnIC0yCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE3OAogICAgLy8gY29uc3QgYlVpbnROID0gbmV3IFVpbnROPDY0PihiQmlndWludCkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18xIC8vIDgKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTEKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTc5CiAgICAvLyByZXR1cm4gYVVpbnROLm5hdGl2ZSA+IEJpZ1VpbnQoYlVpbnROLm5hdGl2ZSkKICAgIGJ0b2kKICAgIGl0b2IKICAgIGI+CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfdWludG5fYmlndWludG5fZ3QoYTogYnl0ZXMsIGI6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV91aW50bl9iaWd1aW50bl9ndDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxODEtMTgyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV91aW50bl9iaWd1aW50bl9ndChhOiBieXRlcywgYjogYnl0ZXMpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE4NQogICAgLy8gY29uc3QgYVVpbnROID0gbmV3IFVpbnROPDY0PihhQmlndWludCkKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18xIC8vIDgKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTIKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTg2CiAgICAvLyBjb25zdCBiVWludE4gPSBuZXcgVWludE48NTEyPihiQmlndWludCkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpbnRjXzIgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMiAvLyA2NAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMQogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxODcKICAgIC8vIHJldHVybiBCaWdVaW50KGFVaW50Ti5uYXRpdmUpID4gYlVpbnROLm5hdGl2ZQogICAgc3dhcAogICAgYnRvaQogICAgaXRvYgogICAgYjwKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9iaWd1aW50bl9iaWd1aW50bl9ndChhOiBieXRlcywgYjogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX2d0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE4OS0xOTAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX2d0KGE6IGJ5dGVzLCBiOiBieXRlcyk6IGJvb2xlYW4gewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTkzCiAgICAvLyBjb25zdCBhVWludE4gPSBuZXcgVWludE48NTEyPihhQmlndWludCkKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpbnRjXzIgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMiAvLyA2NAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgZGlnIDEKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MTk0CiAgICAvLyBjb25zdCBiVWludE4gPSBuZXcgVWludE48NTEyPihiQmlndWludCkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpbnRjXzIgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGZyYW1lX2RpZyAtMQogICAgdW5jb3ZlciAyCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjE5NQogICAgLy8gcmV0dXJuIGFVaW50Ti5uYXRpdmUgPiBiVWludE4ubmF0aXZlCiAgICBiPgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2J5dGVfYnl0ZV9ndChhOiBieXRlcywgYjogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X2J5dGVfYnl0ZV9ndDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoxOTctMTk4CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9ieXRlX2J5dGVfZ3QoYTogYnl0ZXMsIGI6IGJ5dGVzKTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMDEKICAgIC8vIGNvbnN0IGFCeXRlID0gbmV3IEJ5dGUoYUJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMCAvLyAxCiAgICBiemVybwogICAgZnJhbWVfZGlnIC0yCiAgICBkaWcgMQogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMDIKICAgIC8vIGNvbnN0IGJCeXRlID0gbmV3IEJ5dGUoYkJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGZyYW1lX2RpZyAtMQogICAgdW5jb3ZlciAyCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIwMwogICAgLy8gcmV0dXJuIGFCeXRlLm5hdGl2ZSA+IGJCeXRlLm5hdGl2ZQogICAgc3dhcAogICAgYnRvaQogICAgc3dhcAogICAgYnRvaQogICAgPgogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3VpbnRuX3VpbnRuX2dlKGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfdWludG5fdWludG5fZ2U6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjA1LTIwNgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfdWludG5fdWludG5fZ2UoYTogYnl0ZXMsIGI6IGJ5dGVzKTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMDkKICAgIC8vIGNvbnN0IGFVaW50TiA9IG5ldyBVaW50Tjw2ND4oYUJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTIKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMSAvLyA4CiAgICBiemVybwogICAgZnJhbWVfZGlnIC0yCiAgICBkaWcgMQogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMTAKICAgIC8vIGNvbnN0IGJVaW50TiA9IG5ldyBVaW50Tjw2ND4oYkJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGZyYW1lX2RpZyAtMQogICAgdW5jb3ZlciAyCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIxMQogICAgLy8gcmV0dXJuIGFVaW50Ti5uYXRpdmUgPj0gYlVpbnROLm5hdGl2ZQogICAgc3dhcAogICAgYnRvaQogICAgc3dhcAogICAgYnRvaQogICAgPj0KICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9iaWd1aW50bl91aW50bl9nZShhOiBieXRlcywgYjogYnl0ZXMpIC0+IHVpbnQ2NDoKdmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2dlOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIxMy0yMTQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2JpZ3VpbnRuX3VpbnRuX2dlKGE6IGJ5dGVzLCBiOiBieXRlcyk6IGJvb2xlYW4gewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjE3CiAgICAvLyBjb25zdCBhVWludE4gPSBuZXcgVWludE48NTEyPihhQmlndWludCkKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpbnRjXzIgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMiAvLyA2NAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMTgKICAgIC8vIGNvbnN0IGJVaW50TiA9IG5ldyBVaW50Tjw2ND4oYkJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgaW50Y18xIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMSAvLyA4CiAgICBiemVybwogICAgZnJhbWVfZGlnIC0xCiAgICBifAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIxOQogICAgLy8gcmV0dXJuIGFVaW50Ti5uYXRpdmUgPj0gQmlnVWludChiVWludE4ubmF0aXZlKQogICAgYnRvaQogICAgaXRvYgogICAgYj49CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfdWludG5fYmlndWludG5fZ2UoYTogYnl0ZXMsIGI6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV91aW50bl9iaWd1aW50bl9nZToKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMjEtMjIyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV91aW50bl9iaWd1aW50bl9nZShhOiBieXRlcywgYjogYnl0ZXMpOiBib29sZWFuIHsKICAgIHByb3RvIDIgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjIyNQogICAgLy8gY29uc3QgYVVpbnROID0gbmV3IFVpbnROPDY0PihhQmlndWludCkKICAgIGZyYW1lX2RpZyAtMgogICAgbGVuCiAgICBpbnRjXzEgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18xIC8vIDgKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTIKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjI2CiAgICAvLyBjb25zdCBiVWludE4gPSBuZXcgVWludE48NTEyPihiQmlndWludCkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpbnRjXzIgLy8gNjQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMiAvLyA2NAogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMQogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMjcKICAgIC8vIHJldHVybiBCaWdVaW50KGFVaW50Ti5uYXRpdmUpID49IGJVaW50Ti5uYXRpdmUKICAgIHN3YXAKICAgIGJ0b2kKICAgIGl0b2IKICAgIGI8PQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2JpZ3VpbnRuX2JpZ3VpbnRuX2dlKGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfYmlndWludG5fYmlndWludG5fZ2U6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjI5LTIzMAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYmlndWludG5fYmlndWludG5fZ2UoYTogYnl0ZXMsIGI6IGJ5dGVzKTogYm9vbGVhbiB7CiAgICBwcm90byAyIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMzMKICAgIC8vIGNvbnN0IGFVaW50TiA9IG5ldyBVaW50Tjw1MTI+KGFCaWd1aW50KQogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIGludGNfMiAvLyA2NAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18yIC8vIDY0CiAgICBiemVybwogICAgZnJhbWVfZGlnIC0yCiAgICBkaWcgMQogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyMzQKICAgIC8vIGNvbnN0IGJVaW50TiA9IG5ldyBVaW50Tjw1MTI+KGJCaWd1aW50KQogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGludGNfMiAvLyA2NAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgZnJhbWVfZGlnIC0xCiAgICB1bmNvdmVyIDIKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjM1CiAgICAvLyByZXR1cm4gYVVpbnROLm5hdGl2ZSA+PSBiVWludE4ubmF0aXZlCiAgICBiPj0KICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9ieXRlX2J5dGVfZ2UoYTogYnl0ZXMsIGI6IGJ5dGVzKSAtPiB1aW50NjQ6CnZlcmlmeV9ieXRlX2J5dGVfZ2U6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjM3LTIzOAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYnl0ZV9ieXRlX2dlKGE6IGJ5dGVzLCBiOiBieXRlcyk6IGJvb2xlYW4gewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjQxCiAgICAvLyBjb25zdCBhQnl0ZSA9IG5ldyBCeXRlKGFCaWd1aW50KQogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIGludGNfMCAvLyAxCiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzAgLy8gMQogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtMgogICAgZGlnIDEKICAgIGJ8CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjQyCiAgICAvLyBjb25zdCBiQnl0ZSA9IG5ldyBCeXRlKGJCaWd1aW50KQogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGludGNfMCAvLyAxCiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBmcmFtZV9kaWcgLTEKICAgIHVuY292ZXIgMgogICAgYnwKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNDMKICAgIC8vIHJldHVybiBhQnl0ZS5uYXRpdmUgPj0gYkJ5dGUubmF0aXZlCiAgICBzd2FwCiAgICBidG9pCiAgICBzd2FwCiAgICBidG9pCiAgICA+PQogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3VpbnRuX2luaXQoYTogYnl0ZXMpIC0+IGJ5dGVzOgp2ZXJpZnlfdWludG5faW5pdDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNDUtMjQ2CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV91aW50bl9pbml0KGE6IGJ5dGVzKTogVWludE48MzI+IHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI0OAogICAgLy8gcmV0dXJuIG5ldyBVaW50TjwzMj4oYUJpZ3VpbnQpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgcHVzaGludCA0IC8vIDQKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIHB1c2hpbnQgNCAvLyA0CiAgICBiemVybwogICAgZnJhbWVfZGlnIC0xCiAgICBifAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2JpZ3VpbnRuX2luaXQoYTogYnl0ZXMpIC0+IGJ5dGVzOgp2ZXJpZnlfYmlndWludG5faW5pdDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNTAtMjUxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9iaWd1aW50bl9pbml0KGE6IGJ5dGVzKTogVWludE48MjU2PiB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNTMKICAgIC8vIHJldHVybiBuZXcgVWludE48MjU2PihhQmlndWludCkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBwdXNoaW50IDMyIC8vIDMyCiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBwdXNoaW50IDMyIC8vIDMyCiAgICBiemVybwogICAgZnJhbWVfZGlnIC0xCiAgICBifAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2J5dGVfaW5pdChhOiBieXRlcykgLT4gYnl0ZXM6CnZlcmlmeV9ieXRlX2luaXQ6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjU1LTI1NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYnl0ZV9pbml0KGE6IGJ5dGVzKTogQnl0ZSB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNTgKICAgIC8vIHJldHVybiBuZXcgQnl0ZShhQmlndWludCkKICAgIGZyYW1lX2RpZyAtMQogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18wIC8vIDEKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTEKICAgIGJ8CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfdWludG5fZnJvbV9sb2coYTogYnl0ZXMpIC0+IGJ5dGVzOgp2ZXJpZnlfdWludG5fZnJvbV9sb2c6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MjcyLTI3MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfdWludG5fZnJvbV9sb2coYTogYnl0ZXMpOiBVaW50TjwzMj4gewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6Mjc0CiAgICAvLyByZXR1cm4gaW50ZXJwcmV0QXNBcmM0PFVpbnROPDMyPj4oYSwgJ2xvZycpCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgNCAwCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXMgaGFzIHZhbGlkIHByZWZpeAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2JpZ3VpbnRuX2Zyb21fbG9nKGE6IGJ5dGVzKSAtPiBieXRlczoKdmVyaWZ5X2JpZ3VpbnRuX2Zyb21fbG9nOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjI3Ni0yNzcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2JpZ3VpbnRuX2Zyb21fbG9nKGE6IGJ5dGVzKTogVWludE48MjU2PiB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyNzgKICAgIC8vIHJldHVybiBpbnRlcnByZXRBc0FyYzQ8VWludE48MjU2Pj4oYSwgJ2xvZycpCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgNCAwCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXMgaGFzIHZhbGlkIHByZWZpeAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2J5dGVfZnJvbV9sb2coYTogYnl0ZXMpIC0+IGJ5dGVzOgp2ZXJpZnlfYnl0ZV9mcm9tX2xvZzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyODAtMjgxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9ieXRlX2Zyb21fbG9nKGE6IGJ5dGVzKTogQnl0ZSB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czoyODIKICAgIC8vIHJldHVybiBpbnRlcnByZXRBc0FyYzQ8Qnl0ZT4oYSwgJ2xvZycpCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgNCAwCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXMgaGFzIHZhbGlkIHByZWZpeAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X3VmaXhlZG54bV9mcm9tX2xvZyhhOiBieXRlcykgLT4gYnl0ZXM6CnZlcmlmeV91Zml4ZWRueG1fZnJvbV9sb2c6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzAwLTMwMQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfdWZpeGVkbnhtX2Zyb21fbG9nKGE6IGJ5dGVzKTogVUZpeGVkTnhNPDMyLCA4PiB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMDIKICAgIC8vIHJldHVybiBpbnRlcnByZXRBc0FyYzQ8VUZpeGVkTnhNPDMyLCA4Pj4oYSwgJ2xvZycpCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgNCAwCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXMgaGFzIHZhbGlkIHByZWZpeAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2JpZ3VmaXhlZG54bV9mcm9tX2xvZyhhOiBieXRlcykgLT4gYnl0ZXM6CnZlcmlmeV9iaWd1Zml4ZWRueG1fZnJvbV9sb2c6CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzA0LTMwNQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyB2ZXJpZnlfYmlndWZpeGVkbnhtX2Zyb21fbG9nKGE6IGJ5dGVzKTogVUZpeGVkTnhNPDI1NiwgMTY+IHsKICAgIHByb3RvIDEgMQogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMwNgogICAgLy8gcmV0dXJuIGludGVycHJldEFzQXJjNDxVRml4ZWROeE08MjU2LCAxNj4+KGEsICdsb2cnKQogICAgZnJhbWVfZGlnIC0xCiAgICBleHRyYWN0IDQgMAogICAgZnJhbWVfZGlnIC0xCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEJ5dGVzIGhhcyB2YWxpZCBwcmVmaXgKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9zdHJpbmdfaW5pdChhOiBieXRlcykgLT4gYnl0ZXM6CnZlcmlmeV9zdHJpbmdfaW5pdDoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMDgtMzA5CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9zdHJpbmdfaW5pdChhOiBzdHJpbmcpOiBTdHIgewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzEwCiAgICAvLyBjb25zdCByZXN1bHQgPSBuZXcgU3RyKGBIZWxsbywgJHthfWApCiAgICBwdXNoYnl0ZXMgIkhlbGxvLCAiCiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgZHVwCiAgICBsZW4KICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMTEKICAgIC8vIHJldHVybiByZXN1bHQKICAgIHJldHN1YgoKCi8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czo6QXJjNFByaW1pdGl2ZU9wc0NvbnRyYWN0LnZlcmlmeV9zdHJpbmdfYWRkKGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gYnl0ZXM6CnZlcmlmeV9zdHJpbmdfYWRkOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMxMy0zMTQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X3N0cmluZ19hZGQoYTogU3RyLCBiOiBTdHIpOiBTdHIgewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzE1CiAgICAvLyBjb25zdCByZXN1bHQgPSBhLm5hdGl2ZS5jb25jYXQoYi5uYXRpdmUpCiAgICBmcmFtZV9kaWcgLTIKICAgIGV4dHJhY3QgMiAwCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgMiAwCiAgICBjb25jYXQKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMTYKICAgIC8vIHJldHVybiBuZXcgU3RyKHJlc3VsdCkKICAgIGR1cAogICAgbGVuCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgc3dhcAogICAgY29uY2F0CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfc3RyaW5nX2VxKGE6IGJ5dGVzLCBiOiBieXRlcykgLT4gdWludDY0Ogp2ZXJpZnlfc3RyaW5nX2VxOgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjMxOC0zMTkKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X3N0cmluZ19lcShhOiBTdHIsIGI6IFN0cik6IGJvb2xlYW4gewogICAgcHJvdG8gMiAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzIwCiAgICAvLyByZXR1cm4gYSA9PT0gYgogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgID09CiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfc3RyaW5nX2J5dGVzKGE6IGJ5dGVzKSAtPiBieXRlczoKdmVyaWZ5X3N0cmluZ19ieXRlczoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMjItMzIzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9zdHJpbmdfYnl0ZXMoYTogc3RyaW5nKTogYnl0ZXMgewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzI0CiAgICAvLyBjb25zdCByZXN1bHQgPSBuZXcgU3RyKGEpCiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgaXRvYgogICAgZXh0cmFjdCA2IDIKICAgIGZyYW1lX2RpZyAtMQogICAgY29uY2F0CiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzI1CiAgICAvLyByZXR1cm4gcmVzdWx0LmJ5dGVzCiAgICByZXRzdWIKCgovLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6OkFyYzRQcmltaXRpdmVPcHNDb250cmFjdC52ZXJpZnlfc3RyaW5nX2Zyb21fbG9nKGE6IGJ5dGVzKSAtPiBieXRlczoKdmVyaWZ5X3N0cmluZ19mcm9tX2xvZzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozMzEtMzMyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9zdHJpbmdfZnJvbV9sb2coYTogYnl0ZXMpOiBTdHIgewogICAgcHJvdG8gMSAxCiAgICAvLyB0ZXN0cy9hcnRpZmFjdHMvYXJjNC1wcmltaXRpdmUtb3BzL2NvbnRyYWN0LmFsZ28udHM6MzMzCiAgICAvLyByZXR1cm4gaW50ZXJwcmV0QXNBcmM0PFN0cj4oYSwgJ2xvZycpCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgNCAwCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXMgaGFzIHZhbGlkIHByZWZpeAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2Jvb2xfZnJvbV9sb2coYTogYnl0ZXMpIC0+IGJ5dGVzOgp2ZXJpZnlfYm9vbF9mcm9tX2xvZzoKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozNDMtMzQ0CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgLy8gcHVibGljIHZlcmlmeV9ib29sX2Zyb21fbG9nKGE6IGJ5dGVzKTogQm9vbCB7CiAgICBwcm90byAxIDEKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozNDUKICAgIC8vIHJldHVybiBpbnRlcnByZXRBc0FyYzQ8Qm9vbD4oYSwgJ2xvZycpCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgNCAwCiAgICBmcmFtZV9kaWcgLTEKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXMgaGFzIHZhbGlkIHByZWZpeAogICAgcmV0c3ViCgoKLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjpBcmM0UHJpbWl0aXZlT3BzQ29udHJhY3QudmVyaWZ5X2VtaXQoYTogYnl0ZXMsIGI6IGJ5dGVzLCBjOiBieXRlcywgZDogYnl0ZXMsIGU6IGJ5dGVzLCBmOiBieXRlcywgZzogYnl0ZXMsIGg6IGJ5dGVzLCBtOiBieXRlcywgbjogYnl0ZXMsIG86IGJ5dGVzLCBwOiBieXRlcywgcTogYnl0ZXMsIHI6IGJ5dGVzLCBzOiBieXRlcywgdDogYnl0ZXMpIC0+IHZvaWQ6CnZlcmlmeV9lbWl0OgogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM0OS0zNjcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdmVyaWZ5X2VtaXQoCiAgICAvLyAgIGE6IGFyYzQuU3RyLAogICAgLy8gICBiOiBhcmM0LlVpbnROPDUxMj4sCiAgICAvLyAgIGM6IGFyYzQuVWludE42NCwKICAgIC8vICAgZDogYXJjNC5EeW5hbWljQnl0ZXMsCiAgICAvLyAgIGU6IGFyYzQuVWludE42NCwKICAgIC8vICAgZjogYXJjNC5Cb29sLAogICAgLy8gICBnOiBhcmM0LkR5bmFtaWNCeXRlcywKICAgIC8vICAgaDogYXJjNC5TdHIsCiAgICAvLyAgIG06IGFyYzQuVWludE48NjQ+LAogICAgLy8gICBuOiBhcmM0LlVpbnROPDI1Nj4sCiAgICAvLyAgIG86IGFyYzQuVUZpeGVkTnhNPDMyLCA4PiwKICAgIC8vICAgcDogYXJjNC5VRml4ZWROeE08MjU2LCAxNj4sCiAgICAvLyAgIHE6IGFyYzQuQm9vbCwKICAgIC8vICAgcjogYnl0ZXMsCiAgICAvLyAgIHM6IGJ5dGVzLAogICAgLy8gICB0OiBieXRlcywKICAgIC8vICk6IHZvaWQgewogICAgcHJvdG8gMTYgMAogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM3MgogICAgLy8gZW1pdChuZXcgU3dhcHBlZEFyYzQoeyBtLCBuLCBvLCBwLCBxLCByOiBhcmM0X3IsIHM6IGFyYzRfcywgdDogYXJjNF90IH0pKQogICAgZnJhbWVfZGlnIC04CiAgICBmcmFtZV9kaWcgLTcKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC02CiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtNQogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTQKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0zCiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAweDAwNTQKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0yCiAgICBsZW4KICAgIHB1c2hpbnQgODQgLy8gODQKICAgIGRpZyAxCiAgICArCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgdW5jb3ZlciAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4NjZiYjAzMzMgLy8gbWV0aG9kICJTd2FwcGVkQXJjNCh1aW50NjQsdWludDI1Nix1Zml4ZWQzMng4LHVmaXhlZDI1NngxNixib29sLHVpbnQ4WzNdLHVpbnQxNltdLCh1aW50MzIsdWludDY0LHN0cmluZykpIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIC8vIHRlc3RzL2FydGlmYWN0cy9hcmM0LXByaW1pdGl2ZS1vcHMvY29udHJhY3QuYWxnby50czozNzMKICAgIC8vIGVtaXQoJ1N3YXBwZWQnLCBhLCBiLCBjLCBkLCBlLCBmLCBnLCBoLCBtLCBuLCBvLCBwLCBxLCBhcmM0X3IuY29weSgpLCBhcmM0X3MuY29weSgpLCBhcmM0X3QpCiAgICBmcmFtZV9kaWcgLTE2CiAgICBsZW4KICAgIHB1c2hpbnQgMTczIC8vIDE3MwogICAgKwogICAgcHVzaGJ5dGVzIDB4MDBhZAogICAgZnJhbWVfZGlnIC0xNQogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTE0CiAgICBjb25jYXQKICAgIGRpZyAxCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTEzCiAgICBsZW4KICAgIHVuY292ZXIgMgogICAgKwogICAgc3dhcAogICAgZnJhbWVfZGlnIC0xMgogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTExCiAgICBjb25jYXQKICAgIGRpZyAxCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTEwCiAgICBsZW4KICAgIHVuY292ZXIgMgogICAgKwogICAgZHVwCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgdW5jb3ZlciAyCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtOQogICAgbGVuCiAgICB1bmNvdmVyIDIKICAgICsKICAgIHN3YXAKICAgIGZyYW1lX2RpZyAtOAogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTcKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC02CiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtNQogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTQKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0zCiAgICBjb25jYXQKICAgIGRpZyAxCiAgICBpdG9iCiAgICBleHRyYWN0IDYgMgogICAgY29uY2F0CiAgICBzd2FwCiAgICB1bmNvdmVyIDIKICAgICsKICAgIGl0b2IKICAgIGV4dHJhY3QgNiAyCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtMTYKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0xMwogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTEwCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtOQogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTIKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAweGVjMzMxOWJiIC8vIG1ldGhvZCAiU3dhcHBlZChzdHJpbmcsdWludDUxMix1aW50NjQsYnl0ZVtdLHVpbnQ2NCxib29sLGJ5dGVbXSxzdHJpbmcsdWludDY0LHVpbnQyNTYsdWZpeGVkMzJ4OCx1Zml4ZWQyNTZ4MTYsYm9vbCx1aW50OFszXSx1aW50MTZbXSwodWludDMyLHVpbnQ2NCxzdHJpbmcpKSIKICAgIGRpZyAxCiAgICBjb25jYXQKICAgIGxvZwogICAgLy8gdGVzdHMvYXJ0aWZhY3RzL2FyYzQtcHJpbWl0aXZlLW9wcy9jb250cmFjdC5hbGdvLnRzOjM3NC0zOTIKICAgIC8vIGVtaXQoCiAgICAvLyAgICdTd2FwcGVkKHN0cmluZyx1aW50NTEyLHVpbnQ2NCxieXRlW10sdWludDY0LGJvb2wsYnl0ZVtdLHN0cmluZyx1aW50NjQsdWludDI1Nix1Zml4ZWQzMng4LHVmaXhlZDI1NngxNixib29sLHVpbnQ4WzNdLHVpbnQxNltdLCh1aW50MzIsdWludDY0LHN0cmluZykpJywKICAgIC8vICAgYSwKICAgIC8vICAgYiwKICAgIC8vICAgYywKICAgIC8vICAgZCwKICAgIC8vICAgZSwKICAgIC8vICAgZiwKICAgIC8vICAgZywKICAgIC8vICAgaCwKICAgIC8vICAgbSwKICAgIC8vICAgbiwKICAgIC8vICAgbywKICAgIC8vICAgcCwKICAgIC8vICAgcSwKICAgIC8vICAgYXJjNF9yLmNvcHkoKSwKICAgIC8vICAgYXJjNF9zLmNvcHkoKSwKICAgIC8vICAgYXJjNF90LAogICAgLy8gKQogICAgcHVzaGJ5dGVzIDB4NzZiOTE4ZmEgLy8gbWV0aG9kICJTd2FwcGVkKHN0cmluZyx1aW50NTEyLHVpbnQ2NCxieXRlW10sdWludDY0LGJvb2wsYnl0ZVtdLHN0cmluZyx1aW50NjQsdWludDI1Nix1Zml4ZWQzMng4LHVmaXhlZDI1NngxNixib29sLHVpbnQ4WzNdLHVpbnQxNltdLCh1aW50MzIsdWludDY0LHN0cmluZykpKHN0cmluZyx1aW50NTEyLHVpbnQ2NCxieXRlW10sdWludDY0LGJvb2wsYnl0ZVtdLHN0cmluZyx1aW50NjQsdWludDI1Nix1Zml4ZWQzMng4LHVmaXhlZDI1NngxNixib29sLHVpbnQ4WzNdLHVpbnQxNltdLCh1aW50MzIsdWludDY0LHN0cmluZykpIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIHJldHN1Ygo=", + "clear": "I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==" + }, + "byteCode": { + "approval": "CiAEAQhAACYCBBUffHUBADEbQQfMgjcElvFBFgTtZmCWBCygNSsEhZB9QAROsq9KBCy+xFsEB2Zv2QQ3C6vTBCtrPvAEJ+IamAQznal8BHiY7ZcEHxMM7ATHSGZOBKK6wUsEekYMsQTcqx8BBJfZBk0EzgbCoAR8EeN1BNzbzuAEd6S2jQRPVAYmBAla7UEE33jNxgTjt+kYBFUzcAgEm7HNZgSBSE2dBHnpywMEmgPfEATT8ORLBGc9sr0EmC2yMwSv+98OBI5KMPcEKIr3bgSL2EoEBPzVXh8EDxV0/gSyyxO+BNBZ7qcETMTBVwQ9F6xuBPfz1fwE+Mj41QRD9xYqBELgkHUE2Vb1dQRsAWDfBKiQFQsECy9MPwSdudMnBOTZUKEEtgXoDDYaAI43BiMGAgXhBcAFnwV+BV0FPAUbBPoE2QS4BJcEdgRVBDQEEwPyA9EDsAOPA24DTQMsAwsC6gLJAqgChwJmAlACOgIkAhEB/gHrAdUBvwGpAZEBeQFmAVMBPQEnAREA+wDgAMIArwCZAIEAbgBYAAIlQzEZFEQxGEQ2GgE2GgI2GgM2GgQ2GgU2GgY2Ggc2Ggg2Ggk2Ggo2Ggs2Ggw2Gg02Gg5XAgA2Gg9JJVlLAYECWVJXAgA2Gg9JgQJZSwEVUlcCAIgKayJDMRkURDEYRDYaAVcCAIgKSChMULAiQzEZFEQxGEQ2GgFXAgAoTFCwIkMxGRREMRhENhoBSRUWVwYCTFAoTFCwIkMxGRREMRhENhoBVwIAiAn2KExQsCJDMRkURDEYRDYaAVcCAChMULAiQzEZFEQxGEQ2GgFXAgCICb9JFRZXBgJMUChMULAiQzEZFEQxGEQ2GgE2GgKICZgpJU8CVChMULAiQzEZFEQxGEQ2GgE2GgKICWYoTFCwIkMxGRREMRhENhoBVwIAiAk4KExQsCJDMRkURDEYRDYaAVcCAIgJEShMULAiQzEZFEQxGEQ2GgFXAgCICOooTFCwIkMxGRREMRhENhoBVwIAKExQsCJDMRkURDEYRDYaAVcCAChMULAiQzEZFEQxGEQ2GgFJFRZXBgJMUChMULAiQzEZFEQxGEQ2GgFJFRZXBgJMUChMULAiQzEZFEQxGEQ2GgFXAgCICG0oTFCwIkMxGRREMRhENhoBVwIAiAhGKExQsCJDMRkURDEYRDYaAVcCAIgIHyhMULAiQzEZFEQxGEQ2GgFXAgAoTFCwIkMxGRREMRhENhoBVwIAKExQsCJDMRkURDEYRDYaAVcCAChMULAiQzEZFEQxGEQ2GgFXAgCIB8EoTFCwIkMxGRREMRhENhoBVwIAiAeaKExQsCJDMRkURDEYRDYaAVcCAIgHcyhMULAiQzEZFEQxGEQ2GgFXAgA2GgJXAgCIBzYpJU8CVChMULAiQzEZFEQxGEQ2GgFXAgA2GgJXAgCIBvgpJU8CVChMULAiQzEZFEQxGEQ2GgFXAgA2GgJXAgCIBrkpJU8CVChMULAiQzEZFEQxGEQ2GgFXAgA2GgJXAgCIBnspJU8CVChMULAiQzEZFEQxGEQ2GgFXAgA2GgJXAgCIBjkpJU8CVChMULAiQzEZFEQxGEQ2GgFXAgA2GgJXAgCIBfcpJU8CVChMULAiQzEZFEQxGEQ2GgFXAgA2GgJXAgCIBbkpJU8CVChMULAiQzEZFEQxGEQ2GgFXAgA2GgJXAgCIBXopJU8CVChMULAiQzEZFEQxGEQ2GgFXAgA2GgJXAgCIBTwpJU8CVChMULAiQzEZFEQxGEQ2GgFXAgA2GgJXAgCIBPopJU8CVChMULAiQzEZFEQxGEQ2GgFXAgA2GgJXAgCIBLgpJU8CVChMULAiQzEZFEQxGEQ2GgFXAgA2GgJXAgCIBHopJU8CVChMULAiQzEZFEQxGEQ2GgFXAgA2GgJXAgCIBDspJU8CVChMULAiQzEZFEQxGEQ2GgFXAgA2GgJXAgCIA/0pJU8CVChMULAiQzEZFEQxGEQ2GgFXAgA2GgJXAgCIA7spJU8CVChMULAiQzEZFEQxGEQ2GgFXAgA2GgJXAgCIA3kpJU8CVChMULAiQzEZFEQxGEQ2GgFXAgA2GgJXAgCIAzspJU8CVChMULAiQzEZFEQxGEQ2GgFXAgA2GgJXAgCIAvwpJU8CVChMULAiQzEZFEQxGEQ2GgFXAgA2GgJXAgCIAr4pJU8CVChMULAiQzEZFEQxGEQ2GgFXAgA2GgJXAgCIAnwpJU8CVChMULAiQzEZFEQxGEQ2GgFXAgA2GgJXAgCIAj4pJU8CVChMULAiQzEZFEQxGEQ2GgFXAgA2GgJXAgCIAgApJU8CVChMULAiQzEZFEQxGEQ2GgFXAgA2GgJXAgCIAcMpJU8CVChMULAiQzEZFEQxGEQ2GgFXAgA2GgJXAgCIAYYpJU8CVChMULAiQzEZFEQxGEQ2GgFXAgA2GgJXAgCIAUgpJU8CVChMULAiQzEZFEQxGEQ2GgFXAgA2GgJXAgCIAQopJU8CVChMULAiQzEZFEQxGEQ2GgFXAgA2GgJXAgCIAMwpJU8CVChMULAiQzEZFEQxGEQ2GgFXAgA2GgJXAgCIAJApJU8CVChMULAiQzEZFEQxGEQ2GgFXAgA2GgJXAgCIAFQpJU8CVChMULAiQzEZFEQxGEQ2GgFXAgA2GgJXAgCIABYpJU8CVChMULAiQzEZQPm3MRgURCJDigIBi/4VIw5EI6+L/ksBq4v/FSMORIv/TwKrEomKAgGL/hUkDkQkr4v+q4v/FSMORCOvi/+rEomKAgGL/hUjDkQjr4v+q4v/FSQORCSvi/+rEomKAgGL/hUkDkQkr4v+SwGri/8VJA5Ei/9PAqsSiYoCAYv+FSIORCKvi/5LAauL/xUiDkSL/08CqxKJigIBi/4VIw5EI6+L/ksBq4v/FSMORIv/TwKrE4mKAgGL/hUkDkQkr4v+q4v/FSMORCOvi/+rEhSJigIBi/4VIw5EI6+L/quL/xUkDkQkr4v/qxIUiYoCAYv+FSQORCSvi/5LAauL/xUkDkSL/08CqxOJigIBi/4VIg5EIq+L/ksBq4v/FSIORIv/TwKrE4mKAgGL/hUjDkQjr4v+SwGri/8VIw5Ei/9PAqtMF0wXDImKAgGL/hUkDkQkr4v+q4v/FSMORCOvi/+rFxakiYoCAYv+FSMORCOvi/6ri/8VJA5EJK+L/6tMFxaliYoCAYv+FSQORCSvi/5LAauL/xUkDkSL/08Cq6SJigIBi/4VIg5EIq+L/ksBq4v/FSIORIv/TwKrTBdMFwyJigIBi/4VIw5EI6+L/ksBq4v/FSMORIv/TwKrTBdMFw6JigIBi/4VJA5EJK+L/quL/xUjDkQjr4v/qxcWpomKAgGL/hUjDkQjr4v+q4v/FSQORCSvi/+rTBcWp4mKAgGL/hUkDkQkr4v+SwGri/8VJA5Ei/9PAqumiYoCAYv+FSIORCKvi/5LAauL/xUiDkSL/08Cq0wXTBcOiYoCAYv+FSMORCOvi/5LAauL/xUjDkSL/08Cq0wXTBcNiYoCAYv+FSQORCSvi/6ri/8VIw5EI6+L/6sXFqWJigIBi/4VIw5EI6+L/quL/xUkDkQkr4v/q0wXFqSJigIBi/4VJA5EJK+L/ksBq4v/FSQORIv/TwKrpYmKAgGL/hUiDkQir4v+SwGri/8VIg5Ei/9PAqtMF0wXDYmKAgGL/hUjDkQjr4v+SwGri/8VIw5Ei/9PAqtMF0wXD4mKAgGL/hUkDkQkr4v+q4v/FSMORCOvi/+rFxaniYoCAYv+FSMORCOvi/6ri/8VJA5EJK+L/6tMFxamiYoCAYv+FSQORCSvi/5LAauL/xUkDkSL/08Cq6eJigIBi/4VIg5EIq+L/ksBq4v/FSIORIv/TwKrTBdMFw+JigEBi/8VgQQORIEEr4v/q4mKAQGL/xWBIA5EgSCvi/+riYoBAYv/FSIORCKvi/+riYoBAYv/VwQAi/9XAAQoEkSJigEBi/9XBACL/1cABCgSRImKAQGL/1cEAIv/VwAEKBJEiYoBAYv/VwQAi/9XAAQoEkSJigEBi/9XBACL/1cABCgSRImKAQGAB0hlbGxvLCCL/1BJFRZXBgJMUImKAgGL/lcCAIv/VwIAUEkVFlcGAkxQiYoCAYv+i/8SiYoBAYv/FRZXBgKL/1CJigEBi/9XBACL/1cABCgSRImKAQGL/1cEAIv/VwAEKBJEiYoQAIv4i/lQi/pQi/tQi/xQi/1QgAIAVFCL/hWBVEsBCBZXBgJPAkxQi/5Qi/9QgARmuwMzTFCwi/AVga0BCIACAK2L8VCL8lBLARZXBgJQi/MVTwIITIv0UIv1UEsBFlcGAlCL9hVPAghJFlcGAk8CTFCL9xVPAghMi/hQi/lQi/pQi/tQi/xQi/1QSwEWVwYCUExPAggWVwYCUIvwUIvzUIv2UIv3UIv+UIv/UIAE7DMZu0sBULCABHa5GPpMULCJ", + "clear": "CoEBQw==" + }, + "compilerInfo": { + "compiler": "puya", + "compilerVersion": { + "major": 4, + "minor": 0, + "patch": 0 + } }, - "events": [], + "events": [ + { + "name": "SwappedArc4", + "args": [ + { + "type": "uint64", + "name": "m" + }, + { + "type": "uint256", + "name": "n" + }, + { + "type": "ufixed32x8", + "name": "o" + }, + { + "type": "ufixed256x16", + "name": "p" + }, + { + "type": "bool", + "name": "q" + }, + { + "type": "uint8[3]", + "name": "r" + }, + { + "type": "uint16[]", + "name": "s" + }, + { + "type": "(uint32,uint64,string)", + "name": "t" + } + ] + }, + { + "name": "Swapped", + "args": [ + { + "type": "string", + "name": "0" + }, + { + "type": "uint512", + "name": "1" + }, + { + "type": "uint64", + "name": "2" + }, + { + "type": "byte[]", + "name": "3" + }, + { + "type": "uint64", + "name": "4" + }, + { + "type": "bool", + "name": "5" + }, + { + "type": "byte[]", + "name": "6" + }, + { + "type": "string", + "name": "7" + }, + { + "type": "uint64", + "name": "8" + }, + { + "type": "uint256", + "name": "9" + }, + { + "type": "ufixed32x8", + "name": "10" + }, + { + "type": "ufixed256x16", + "name": "11" + }, + { + "type": "bool", + "name": "12" + }, + { + "type": "uint8[3]", + "name": "13" + }, + { + "type": "uint16[]", + "name": "14" + }, + { + "type": "(uint32,uint64,string)", + "name": "15" + } + ] + }, + { + "name": "", + "args": [ + { + "type": "string", + "name": "0" + }, + { + "type": "uint512", + "name": "1" + }, + { + "type": "uint64", + "name": "2" + }, + { + "type": "byte[]", + "name": "3" + }, + { + "type": "uint64", + "name": "4" + }, + { + "type": "bool", + "name": "5" + }, + { + "type": "byte[]", + "name": "6" + }, + { + "type": "string", + "name": "7" + }, + { + "type": "uint64", + "name": "8" + }, + { + "type": "uint256", + "name": "9" + }, + { + "type": "ufixed32x8", + "name": "10" + }, + { + "type": "ufixed256x16", + "name": "11" + }, + { + "type": "bool", + "name": "12" + }, + { + "type": "uint8[3]", + "name": "13" + }, + { + "type": "uint16[]", + "name": "14" + }, + { + "type": "(uint32,uint64,string)", + "name": "15" + } + ] + } + ], "templateVariables": {} } \ No newline at end of file diff --git a/tests/artifacts/arc4-primitive-ops/data/Arc4PrimitiveOpsContract.clear.teal b/tests/artifacts/arc4-primitive-ops/data/Arc4PrimitiveOpsContract.clear.teal index 2bdc696..a4d5804 100644 --- a/tests/artifacts/arc4-primitive-ops/data/Arc4PrimitiveOpsContract.clear.teal +++ b/tests/artifacts/arc4-primitive-ops/data/Arc4PrimitiveOpsContract.clear.teal @@ -1,5 +1,7 @@ #pragma version 10 +#pragma typetrack false -tests/artifacts/arc4-primitive-ops/contract.algo.ts::Arc4PrimitiveOpsContract.clearStateProgram: +// @algorandfoundation/algorand-typescript/base-contract.d.ts::BaseContract.clearStateProgram() -> uint64: +main: pushint 1 // 1 return