avm1-emitter
Advanced tools
Comparing version 0.9.0 to 0.10.0
@@ -5,8 +5,11 @@ // tslint:disable:restrict-plus-operands | ||
import { ActionType } from "avm1-types/action-type"; | ||
import { Cfg } from "avm1-types/cfg"; | ||
import { CfgDefineFunction } from "avm1-types/cfg-actions/cfg-define-function"; | ||
import { CfgDefineFunction2 } from "avm1-types/cfg-actions/cfg-define-function2"; | ||
import { CfgBlock } from "avm1-types/cfg-block"; | ||
import { CfgBlockType } from "avm1-types/cfg-block-type"; | ||
import { CfgLabel, NullableCfgLabel } from "avm1-types/cfg-label"; | ||
import { DefineFunction as CfgDefineFunction } from "avm1-types/cfg/actions/define-function"; | ||
import { DefineFunction2 as CfgDefineFunction2 } from "avm1-types/cfg/actions/define-function2"; | ||
import { Cfg } from "avm1-types/cfg/cfg"; | ||
import { CfgBlock } from "avm1-types/cfg/cfg-block"; | ||
import { CfgFlow } from "avm1-types/cfg/cfg-flow"; | ||
import { CfgFlowType } from "avm1-types/cfg/cfg-flow-type"; | ||
import { CfgLabel, NullableCfgLabel } from "avm1-types/cfg/cfg-label"; | ||
import { Try as RawTry } from "avm1-types/raw/actions/try"; | ||
import { CatchBlock as RawCatchBlock } from "avm1-types/raw/catch-block"; | ||
import { UintSize } from "semantic-types"; | ||
@@ -60,3 +63,3 @@ import { emitAction } from "./emitters/avm1"; | ||
const blockList: ReadonlyArray<CfgBlock> = [cfg.head, ...cfg.tail]; | ||
const blockList: ReadonlyArray<CfgBlock> = cfg.blocks; | ||
@@ -103,47 +106,53 @@ for (let i: UintSize = 0; i < blockList.length; i++) { | ||
} | ||
switch (block.type) { | ||
case CfgBlockType.Error: | ||
const flow: CfgFlow = block.flow; | ||
switch (flow.type) { | ||
case CfgFlowType.Error: | ||
emitError(stream); | ||
break; | ||
case CfgBlockType.If: | ||
jumps.set(emitIfAction(stream), block.ifTrue); | ||
if (fallthroughNext !== block.ifFalse) { | ||
if (block.ifFalse === null) { | ||
case CfgFlowType.If: | ||
jumps.set(emitIfAction(stream), flow.trueTarget); | ||
if (fallthroughNext !== flow.falseTarget) { | ||
if (flow.falseTarget === null) { | ||
emitEndAction(stream); | ||
} else { | ||
jumps.set(emitJumpAction(stream), block.ifFalse); | ||
jumps.set(emitJumpAction(stream), flow.falseTarget); | ||
} | ||
} | ||
break; | ||
case CfgBlockType.Simple: | ||
if (fallthroughNext !== block.next) { | ||
if (block.next === null) { | ||
case CfgFlowType.Simple: | ||
if (fallthroughNext !== flow.next) { | ||
if (flow.next === null) { | ||
emitEndAction(stream); | ||
} else { | ||
jumps.set(emitJumpAction(stream), block.next); | ||
jumps.set(emitJumpAction(stream), flow.next); | ||
} | ||
} | ||
break; | ||
case CfgBlockType.Return: | ||
case CfgFlowType.Return: | ||
emitAction(stream, {action: ActionType.Return}); | ||
break; | ||
case CfgBlockType.Throw: | ||
case CfgFlowType.Throw: | ||
emitAction(stream, {action: ActionType.Throw}); | ||
break; | ||
case CfgBlockType.Try: { | ||
case CfgFlowType.Try: { | ||
const finallyNext: NullableCfgLabel = fallthroughNext; | ||
const catchNext: NullableCfgLabel = block.finally !== undefined | ||
? block.finally.head.label | ||
const catchNext: NullableCfgLabel = flow.finally !== undefined | ||
? flow.finally.blocks[0].label | ||
: finallyNext; | ||
const tryNext: NullableCfgLabel = block.catch !== undefined | ||
? block.catch.head.label | ||
const tryNext: NullableCfgLabel = flow.catch !== undefined | ||
? flow.catch.body.blocks[0].label | ||
: catchNext; | ||
const tryStream: WritableByteStream = new WritableStream(); | ||
const tryWi: WriteInfo = emitSoftCfg(tryStream, block.try, tryNext); | ||
const tryWi: WriteInfo = emitSoftCfg(tryStream, flow.try, tryNext); | ||
const catchStream: WritableByteStream = new WritableStream(); | ||
let catchWi: WriteInfo | undefined; | ||
if (block.catch !== undefined) { | ||
catchWi = emitSoftCfg(catchStream, block.catch, catchNext); | ||
let rawCatch: {block: RawCatchBlock; info: WriteInfo} | undefined; | ||
if (flow.catch !== undefined) { | ||
const info: WriteInfo = emitSoftCfg(catchStream, flow.catch.body, catchNext); | ||
const block: RawCatchBlock = { | ||
target: flow.catch.target, | ||
size: catchStream.bytePos, | ||
}; | ||
rawCatch = {block, info}; | ||
} | ||
@@ -153,17 +162,15 @@ | ||
let finallyWi: WriteInfo | undefined; | ||
if (block.finally !== undefined) { | ||
finallyWi = emitSoftCfg(finallyStream, block.finally, finallyNext); | ||
if (flow.finally !== undefined) { | ||
finallyWi = emitSoftCfg(finallyStream, flow.finally, finallyNext); | ||
} | ||
emitAction( | ||
stream, | ||
{ | ||
action: ActionType.Try, | ||
trySize: tryStream.bytePos, | ||
catchSize: catchWi !== undefined ? catchStream.bytePos : undefined, | ||
catchTarget: block.catchTarget, | ||
finallySize: finallyWi !== undefined ? finallyStream.bytePos : undefined, | ||
}, | ||
); | ||
const rawTry: RawTry = { | ||
action: ActionType.Try, | ||
try: tryStream.bytePos, | ||
catch: rawCatch !== undefined ? rawCatch.block : undefined, | ||
finally: finallyWi !== undefined ? finallyStream.bytePos : undefined, | ||
}; | ||
emitAction(stream, rawTry); | ||
for (const [offset, target] of tryWi.jumps) { | ||
@@ -177,7 +184,7 @@ jumps.set(stream.bytePos + offset, target); | ||
if (catchWi !== undefined) { | ||
for (const [offset, target] of catchWi.jumps) { | ||
if (rawCatch !== undefined) { | ||
for (const [offset, target] of rawCatch.info.jumps) { | ||
jumps.set(stream.bytePos + offset, target); | ||
} | ||
for (const [label, offset] of catchWi.blocks) { | ||
for (const [label, offset] of rawCatch.info.blocks) { | ||
blocks.set(label, stream.bytePos + offset); | ||
@@ -199,16 +206,16 @@ } | ||
} | ||
case CfgBlockType.WaitForFrame: | ||
emitAction(stream, {action: ActionType.WaitForFrame, frame: block.frame, skipCount: 1}); | ||
jumps.set(emitJumpAction(stream), block.ifLoaded); | ||
jumps.set(emitJumpAction(stream), block.ifNotLoaded); | ||
case CfgFlowType.WaitForFrame: | ||
emitAction(stream, {action: ActionType.WaitForFrame, frame: flow.frame, skip: 1}); | ||
jumps.set(emitJumpAction(stream), flow.readyTarget); | ||
jumps.set(emitJumpAction(stream), flow.loadingTarget); | ||
break; | ||
case CfgBlockType.WaitForFrame2: | ||
emitAction(stream, {action: ActionType.WaitForFrame2, skipCount: 1}); | ||
jumps.set(emitJumpAction(stream), block.ifLoaded); | ||
jumps.set(emitJumpAction(stream), block.ifNotLoaded); | ||
case CfgFlowType.WaitForFrame2: | ||
emitAction(stream, {action: ActionType.WaitForFrame2, skip: 1}); | ||
jumps.set(emitJumpAction(stream), flow.readyTarget); | ||
jumps.set(emitJumpAction(stream), flow.loadingTarget); | ||
break; | ||
case CfgBlockType.With: { | ||
case CfgFlowType.With: { | ||
const withStream: WritableByteStream = new WritableStream(); | ||
const withWi: WriteInfo = emitSoftCfg(withStream, block.with, fallthroughNext); | ||
emitAction(stream, {action: ActionType.With, withSize: withStream.bytePos}); | ||
const withWi: WriteInfo = emitSoftCfg(withStream, flow.body, fallthroughNext); | ||
emitAction(stream, {action: ActionType.With, size: withStream.bytePos}); | ||
for (const [offset, target] of withWi.jumps) { | ||
@@ -215,0 +222,0 @@ jumps.set(stream.bytePos + offset, target); |
import { WritableByteStream as ByteStream, WritableStream as Stream } from "@open-flash/stream"; | ||
import { Action } from "avm1-types/action"; | ||
import { ActionType } from "avm1-types/action-type"; | ||
import * as actions from "avm1-types/actions/index"; | ||
import { CatchTarget } from "avm1-types/catch-target"; | ||
import { CatchTargetType } from "avm1-types/catch-targets/_type"; | ||
import { GetUrl2Method } from "avm1-types/get-url2-method"; | ||
import { Value } from "avm1-types/value"; | ||
import { ValueType } from "avm1-types/value-type"; | ||
import { PushValue } from "avm1-types/push-value"; | ||
import { PushValueType } from "avm1-types/push-value-type"; | ||
import { Action as RawAction } from "avm1-types/raw/action"; | ||
import * as actions from "avm1-types/raw/actions/index"; | ||
import { Incident } from "incident"; | ||
@@ -26,4 +26,4 @@ import { Uint16, Uint2, Uint8, UintSize } from "semantic-types"; | ||
// tslint:disable-next-line:cyclomatic-complexity | ||
export function emitAction(byteStream: ByteStream, value: Action): void { | ||
type ActionEmitter = number | [(byteStream: ByteStream, value: Action) => void | UintSize, number]; | ||
export function emitAction(byteStream: ByteStream, value: RawAction): void { | ||
type ActionEmitter = number | [(byteStream: ByteStream, value: RawAction) => void | UintSize, number]; | ||
@@ -161,4 +161,4 @@ const ACTION_TYPE_TO_EMITTER: Map<ActionType, ActionEmitter> = new Map<ActionType, ActionEmitter>(<any[]> [ | ||
export function emitGetUrlAction(byteStream: ByteStream, value: actions.GetUrl): void { | ||
byteStream.writeCString(value.url); | ||
byteStream.writeCString(value.target); | ||
byteStream.writeNulUtf8(value.url); | ||
byteStream.writeNulUtf8(value.target); | ||
} | ||
@@ -171,5 +171,5 @@ | ||
export function emitConstantPoolAction(byteStream: ByteStream, value: actions.ConstantPool): void { | ||
byteStream.writeUint16LE(value.constantPool.length); | ||
for (const constant of value.constantPool) { | ||
byteStream.writeCString(constant); | ||
byteStream.writeUint16LE(value.pool.length); | ||
for (const constant of value.pool) { | ||
byteStream.writeNulUtf8(constant); | ||
} | ||
@@ -180,15 +180,15 @@ } | ||
byteStream.writeUint16LE(value.frame); | ||
byteStream.writeUint8(value.skipCount); | ||
byteStream.writeUint8(value.skip); | ||
} | ||
export function emitSetTargetAction(byteStream: ByteStream, value: actions.SetTarget): void { | ||
byteStream.writeCString(value.targetName); | ||
byteStream.writeNulUtf8(value.targetName); | ||
} | ||
export function emitGotoLabelAction(byteStream: ByteStream, value: actions.GotoLabel): void { | ||
byteStream.writeCString(value.label); | ||
byteStream.writeNulUtf8(value.label); | ||
} | ||
export function emitWaitForFrame2Action(byteStream: ByteStream, value: actions.WaitForFrame2): void { | ||
byteStream.writeUint8(value.skipCount); | ||
byteStream.writeUint8(value.skip); | ||
} | ||
@@ -203,3 +203,3 @@ | ||
export function emitDefineFunction2Action(byteStream: ByteStream, value: actions.DefineFunction2): void { | ||
byteStream.writeCString(value.name); | ||
byteStream.writeNulUtf8(value.name); | ||
byteStream.writeUint16LE(value.parameters.length); | ||
@@ -222,3 +222,3 @@ byteStream.writeUint8(value.registerCount); | ||
byteStream.writeUint8(parameter.register); | ||
byteStream.writeCString(parameter.name); | ||
byteStream.writeNulUtf8(parameter.name); | ||
} | ||
@@ -233,3 +233,3 @@ | ||
} else { | ||
byteStream.writeCString(value.target); | ||
byteStream.writeNulUtf8(value.target); | ||
} | ||
@@ -239,8 +239,8 @@ } | ||
export function emitTryAction(byteStream: ByteStream, value: actions.Try): void { | ||
const catchInRegister: boolean = value.catchTarget !== undefined | ||
&& value.catchTarget.type === CatchTargetType.Register; | ||
const catchInRegister: boolean = value.catch !== undefined | ||
&& value.catch.target.type === CatchTargetType.Register; | ||
const flags: Uint8 = 0 | ||
| (value.catchSize !== undefined ? 1 << 0 : 0) | ||
| (value.finallySize !== undefined ? 1 << 1 : 0) | ||
| (value.catch !== undefined ? 1 << 0 : 0) | ||
| (value.finally !== undefined ? 1 << 1 : 0) | ||
| (catchInRegister ? 1 << 2 : 0); | ||
@@ -250,6 +250,9 @@ // (Skip 5 bits) | ||
byteStream.writeUint16LE(value.trySize); | ||
byteStream.writeUint16LE(value.catchSize !== undefined ? value.catchSize : 0); | ||
byteStream.writeUint16LE(value.finallySize !== undefined ? value.finallySize : 0); | ||
emitCatchTarget(byteStream, value.catchTarget); | ||
byteStream.writeUint16LE(value.try); | ||
byteStream.writeUint16LE(value.catch !== undefined ? value.catch.size : 0); | ||
byteStream.writeUint16LE(value.finally !== undefined ? value.finally : 0); | ||
emitCatchTarget( | ||
byteStream, | ||
value.catch !== undefined ? value.catch.target : {type: CatchTargetType.Register, target: 0}, | ||
); | ||
} | ||
@@ -265,3 +268,3 @@ | ||
export function emitWithAction(byteStream: ByteStream, value: actions.With): void { | ||
byteStream.writeUint16LE(value.withSize); | ||
byteStream.writeUint16LE(value.size); | ||
} | ||
@@ -275,9 +278,9 @@ | ||
export function emitActionValue(byteStream: ByteStream, value: Value): void { | ||
export function emitActionValue(byteStream: ByteStream, value: PushValue): void { | ||
switch (value.type) { | ||
case ValueType.Boolean: | ||
case PushValueType.Boolean: | ||
byteStream.writeUint8(5); | ||
byteStream.writeUint8(value.value ? 1 : 0); | ||
break; | ||
case ValueType.Constant: | ||
case PushValueType.Constant: | ||
if (value.value > 0xff) { | ||
@@ -291,26 +294,26 @@ byteStream.writeUint8(9); | ||
break; | ||
case ValueType.String: | ||
case PushValueType.String: | ||
byteStream.writeUint8(0); | ||
byteStream.writeCString(value.value); | ||
byteStream.writeNulUtf8(value.value); | ||
break; | ||
case ValueType.Sint32: | ||
case PushValueType.Sint32: | ||
byteStream.writeUint8(7); | ||
byteStream.writeSint32LE(value.value); | ||
break; | ||
case ValueType.Float32: | ||
case PushValueType.Float32: | ||
byteStream.writeUint8(1); | ||
byteStream.writeFloat32LE(value.value); | ||
break; | ||
case ValueType.Float64: | ||
case PushValueType.Float64: | ||
byteStream.writeUint8(6); | ||
byteStream.writeFloat64LE(value.value); | ||
break; | ||
case ValueType.Null: | ||
case PushValueType.Null: | ||
byteStream.writeUint8(2); | ||
break; | ||
case ValueType.Register: | ||
case PushValueType.Register: | ||
byteStream.writeUint8(4); | ||
byteStream.writeUint8(value.value); | ||
break; | ||
case ValueType.Undefined: | ||
case PushValueType.Undefined: | ||
byteStream.writeUint8(3); | ||
@@ -354,6 +357,6 @@ break; | ||
export function emitDefineFunctionAction(byteStream: ByteStream, value: actions.DefineFunction): void { | ||
byteStream.writeCString(value.name); | ||
byteStream.writeNulUtf8(value.name); | ||
byteStream.writeUint16LE(value.parameters.length); | ||
for (const parameter of value.parameters) { | ||
byteStream.writeCString(parameter); | ||
byteStream.writeNulUtf8(parameter); | ||
} | ||
@@ -360,0 +363,0 @@ |
@@ -1,27 +0,2 @@ | ||
import { WritableStream } from "@open-flash/stream"; | ||
import { Action } from "avm1-types/action"; | ||
import { UintSize } from "semantic-types"; | ||
import { emitAction } from "./emitters/avm1"; | ||
export { emitAction } from "./emitters/avm1"; | ||
export { cfgToBytes } from "./cfg-to-bytes"; | ||
export class Avm1Emitter { | ||
private stream: WritableStream; | ||
constructor() { | ||
this.stream = new WritableStream(); | ||
} | ||
getByteOffset(): UintSize { | ||
return this.stream.bytePos; | ||
} | ||
writeAction(action: Action): void { | ||
emitAction(this.stream, action); | ||
} | ||
getBytes(): Uint8Array { | ||
return this.stream.getBytes(); | ||
} | ||
} |
@@ -1,2 +0,2 @@ | ||
import { Cfg } from "avm1-types/cfg"; | ||
import { Cfg } from "avm1-types/cfg/cfg"; | ||
export declare function cfgToBytes(cfg: Cfg): Uint8Array; |
@@ -6,3 +6,3 @@ "use strict"; | ||
const action_type_1 = require("avm1-types/action-type"); | ||
const cfg_block_type_1 = require("avm1-types/cfg-block-type"); | ||
const cfg_flow_type_1 = require("avm1-types/cfg/cfg-flow-type"); | ||
const avm1_1 = require("./emitters/avm1"); | ||
@@ -39,3 +39,3 @@ /** | ||
const blocks = new Map(); | ||
const blockList = [cfg.head, ...cfg.tail]; | ||
const blockList = cfg.blocks; | ||
for (let i = 0; i < blockList.length; i++) { | ||
@@ -72,60 +72,66 @@ const block = blockList[i]; | ||
} | ||
switch (block.type) { | ||
case cfg_block_type_1.CfgBlockType.Error: | ||
const flow = block.flow; | ||
switch (flow.type) { | ||
case cfg_flow_type_1.CfgFlowType.Error: | ||
emitError(stream); | ||
break; | ||
case cfg_block_type_1.CfgBlockType.If: | ||
jumps.set(emitIfAction(stream), block.ifTrue); | ||
if (fallthroughNext !== block.ifFalse) { | ||
if (block.ifFalse === null) { | ||
case cfg_flow_type_1.CfgFlowType.If: | ||
jumps.set(emitIfAction(stream), flow.trueTarget); | ||
if (fallthroughNext !== flow.falseTarget) { | ||
if (flow.falseTarget === null) { | ||
emitEndAction(stream); | ||
} | ||
else { | ||
jumps.set(emitJumpAction(stream), block.ifFalse); | ||
jumps.set(emitJumpAction(stream), flow.falseTarget); | ||
} | ||
} | ||
break; | ||
case cfg_block_type_1.CfgBlockType.Simple: | ||
if (fallthroughNext !== block.next) { | ||
if (block.next === null) { | ||
case cfg_flow_type_1.CfgFlowType.Simple: | ||
if (fallthroughNext !== flow.next) { | ||
if (flow.next === null) { | ||
emitEndAction(stream); | ||
} | ||
else { | ||
jumps.set(emitJumpAction(stream), block.next); | ||
jumps.set(emitJumpAction(stream), flow.next); | ||
} | ||
} | ||
break; | ||
case cfg_block_type_1.CfgBlockType.Return: | ||
case cfg_flow_type_1.CfgFlowType.Return: | ||
avm1_1.emitAction(stream, { action: action_type_1.ActionType.Return }); | ||
break; | ||
case cfg_block_type_1.CfgBlockType.Throw: | ||
case cfg_flow_type_1.CfgFlowType.Throw: | ||
avm1_1.emitAction(stream, { action: action_type_1.ActionType.Throw }); | ||
break; | ||
case cfg_block_type_1.CfgBlockType.Try: { | ||
case cfg_flow_type_1.CfgFlowType.Try: { | ||
const finallyNext = fallthroughNext; | ||
const catchNext = block.finally !== undefined | ||
? block.finally.head.label | ||
const catchNext = flow.finally !== undefined | ||
? flow.finally.blocks[0].label | ||
: finallyNext; | ||
const tryNext = block.catch !== undefined | ||
? block.catch.head.label | ||
const tryNext = flow.catch !== undefined | ||
? flow.catch.body.blocks[0].label | ||
: catchNext; | ||
const tryStream = new stream_1.WritableStream(); | ||
const tryWi = emitSoftCfg(tryStream, block.try, tryNext); | ||
const tryWi = emitSoftCfg(tryStream, flow.try, tryNext); | ||
const catchStream = new stream_1.WritableStream(); | ||
let catchWi; | ||
if (block.catch !== undefined) { | ||
catchWi = emitSoftCfg(catchStream, block.catch, catchNext); | ||
let rawCatch; | ||
if (flow.catch !== undefined) { | ||
const info = emitSoftCfg(catchStream, flow.catch.body, catchNext); | ||
const block = { | ||
target: flow.catch.target, | ||
size: catchStream.bytePos, | ||
}; | ||
rawCatch = { block, info }; | ||
} | ||
const finallyStream = new stream_1.WritableStream(); | ||
let finallyWi; | ||
if (block.finally !== undefined) { | ||
finallyWi = emitSoftCfg(finallyStream, block.finally, finallyNext); | ||
if (flow.finally !== undefined) { | ||
finallyWi = emitSoftCfg(finallyStream, flow.finally, finallyNext); | ||
} | ||
avm1_1.emitAction(stream, { | ||
const rawTry = { | ||
action: action_type_1.ActionType.Try, | ||
trySize: tryStream.bytePos, | ||
catchSize: catchWi !== undefined ? catchStream.bytePos : undefined, | ||
catchTarget: block.catchTarget, | ||
finallySize: finallyWi !== undefined ? finallyStream.bytePos : undefined, | ||
}); | ||
try: tryStream.bytePos, | ||
catch: rawCatch !== undefined ? rawCatch.block : undefined, | ||
finally: finallyWi !== undefined ? finallyStream.bytePos : undefined, | ||
}; | ||
avm1_1.emitAction(stream, rawTry); | ||
for (const [offset, target] of tryWi.jumps) { | ||
@@ -138,7 +144,7 @@ jumps.set(stream.bytePos + offset, target); | ||
stream.write(tryStream); | ||
if (catchWi !== undefined) { | ||
for (const [offset, target] of catchWi.jumps) { | ||
if (rawCatch !== undefined) { | ||
for (const [offset, target] of rawCatch.info.jumps) { | ||
jumps.set(stream.bytePos + offset, target); | ||
} | ||
for (const [label, offset] of catchWi.blocks) { | ||
for (const [label, offset] of rawCatch.info.blocks) { | ||
blocks.set(label, stream.bytePos + offset); | ||
@@ -159,16 +165,16 @@ } | ||
} | ||
case cfg_block_type_1.CfgBlockType.WaitForFrame: | ||
avm1_1.emitAction(stream, { action: action_type_1.ActionType.WaitForFrame, frame: block.frame, skipCount: 1 }); | ||
jumps.set(emitJumpAction(stream), block.ifLoaded); | ||
jumps.set(emitJumpAction(stream), block.ifNotLoaded); | ||
case cfg_flow_type_1.CfgFlowType.WaitForFrame: | ||
avm1_1.emitAction(stream, { action: action_type_1.ActionType.WaitForFrame, frame: flow.frame, skip: 1 }); | ||
jumps.set(emitJumpAction(stream), flow.readyTarget); | ||
jumps.set(emitJumpAction(stream), flow.loadingTarget); | ||
break; | ||
case cfg_block_type_1.CfgBlockType.WaitForFrame2: | ||
avm1_1.emitAction(stream, { action: action_type_1.ActionType.WaitForFrame2, skipCount: 1 }); | ||
jumps.set(emitJumpAction(stream), block.ifLoaded); | ||
jumps.set(emitJumpAction(stream), block.ifNotLoaded); | ||
case cfg_flow_type_1.CfgFlowType.WaitForFrame2: | ||
avm1_1.emitAction(stream, { action: action_type_1.ActionType.WaitForFrame2, skip: 1 }); | ||
jumps.set(emitJumpAction(stream), flow.readyTarget); | ||
jumps.set(emitJumpAction(stream), flow.loadingTarget); | ||
break; | ||
case cfg_block_type_1.CfgBlockType.With: { | ||
case cfg_flow_type_1.CfgFlowType.With: { | ||
const withStream = new stream_1.WritableStream(); | ||
const withWi = emitSoftCfg(withStream, block.with, fallthroughNext); | ||
avm1_1.emitAction(stream, { action: action_type_1.ActionType.With, withSize: withStream.bytePos }); | ||
const withWi = emitSoftCfg(withStream, flow.body, fallthroughNext); | ||
avm1_1.emitAction(stream, { action: action_type_1.ActionType.With, size: withStream.bytePos }); | ||
for (const [offset, target] of withWi.jumps) { | ||
@@ -215,2 +221,2 @@ jumps.set(stream.bytePos + offset, target); | ||
//# sourceMappingURL=data:application/json;charset=utf8;base64,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TSxLQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxJQUFFLENBQUM7SUFDM0QsVUFBVSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM5QixDQUFDO0FBRUQsU0FBUyxhQUFhLENBQUMsVUFBOEI7SUFDbkQsVUFBVSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM5QixDQUFDO0FBRUQsU0FBUyxZQUFZLENBQUMsVUFBOEI7SUFDbEQsaUJBQVUsQ0FBQyxVQUFVLEVBQUUsRUFBQyxNQUFNLEVBQUUsd0JBQVUsQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBQyxDQUFDLENBQUM7SUFDM0QsT0FBTyxVQUFVLENBQUMsT0FBTyxHQUFHLGdCQUFnQixDQUFDO0FBQy9DLENBQUM7QUFFRCxTQUFTLGNBQWMsQ0FBQyxVQUE4QjtJQUNwRCxpQkFBVSxDQUFDLFVBQVUsRUFBRSxFQUFDLE1BQU0sRUFBRSx3QkFBVSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFDLENBQUMsQ0FBQztJQUM3RCxPQUFPLFVBQVUsQ0FBQyxPQUFPLEdBQUcsZ0JBQWdCLENBQUM7QUFDL0MsQ0FBQztBQUVELFNBQVMsU0FBUyxDQUFDLFVBQThCO0lBQy9DLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxZQUFZO0lBQ3pDLFVBQVUsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxrQkFBa0I7SUFDcEQsVUFBVSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLHNDQUFzQztBQUNyRSxDQUFDIiwiZmlsZSI6ImNmZy10by1ieXRlcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIHRzbGludDpkaXNhYmxlOnJlc3RyaWN0LXBsdXMtb3BlcmFuZHNcblxuaW1wb3J0IHsgV3JpdGFibGVCeXRlU3RyZWFtLCBXcml0YWJsZVN0cmVhbSB9IGZyb20gXCJAb3Blbi1mbGFzaC9zdHJlYW1cIjtcbmltcG9ydCB7IEFjdGlvblR5cGUgfSBmcm9tIFwiYXZtMS10eXBlcy9hY3Rpb24tdHlwZVwiO1xuaW1wb3J0IHsgQ2ZnIH0gZnJvbSBcImF2bTEtdHlwZXMvY2ZnXCI7XG5pbXBvcnQgeyBDZmdEZWZpbmVGdW5jdGlvbiB9IGZyb20gXCJhdm0xLXR5cGVzL2NmZy1hY3Rpb25zL2NmZy1kZWZpbmUtZnVuY3Rpb25cIjtcbmltcG9ydCB7IENmZ0RlZmluZUZ1bmN0aW9uMiB9IGZyb20gXCJhdm0xLXR5cGVzL2NmZy1hY3Rpb25zL2NmZy1kZWZpbmUtZnVuY3Rpb24yXCI7XG5pbXBvcnQgeyBDZmdCbG9jayB9IGZyb20gXCJhdm0xLXR5cGVzL2NmZy1ibG9ja1wiO1xuaW1wb3J0IHsgQ2ZnQmxvY2tUeXBlIH0gZnJvbSBcImF2bTEtdHlwZXMvY2ZnLWJsb2NrLXR5cGVcIjtcbmltcG9ydCB7IENmZ0xhYmVsLCBOdWxsYWJsZUNmZ0xhYmVsIH0gZnJvbSBcImF2bTEtdHlwZXMvY2ZnLWxhYmVsXCI7XG5pbXBvcnQgeyBVaW50U2l6ZSB9IGZyb20gXCJzZW1hbnRpYy10eXBlc1wiO1xuaW1wb3J0IHsgZW1pdEFjdGlvbiB9IGZyb20gXCIuL2VtaXR0ZXJzL2F2bTFcIjtcblxuLyoqXG4gKiBTaXplIG9mIHRoZSBvZmZzZXQgaW4gYElmYCBhbmQgYEp1bXBgIGFjdGlvbnMgKGluIGJ5dGVzKS5cbiAqL1xuY29uc3QgSlVNUF9PRkZTRVRfU0laRTogVWludFNpemUgPSAyO1xuXG5leHBvcnQgZnVuY3Rpb24gY2ZnVG9CeXRlcyhjZmc6IENmZyk6IFVpbnQ4QXJyYXkge1xuICByZXR1cm4gZW1pdEhhcmRDZmcoY2ZnLCB0cnVlKTtcbn1cblxuZnVuY3Rpb24gZW1pdEhhcmRDZmcoY2ZnOiBDZmcsIGFwcGVuZEVuZEFjdGlvbjogYm9vbGVhbik6IFVpbnQ4QXJyYXkge1xuICBjb25zdCBzdHJlYW06IFdyaXRhYmxlQnl0ZVN0cmVhbSA9IG5ldyBXcml0YWJsZVN0cmVhbSgpO1xuICBjb25zdCB3aTogV3JpdGVJbmZvID0gZW1pdFNvZnRDZmcoc3RyZWFtLCBjZmcsIG51bGwpO1xuICBjb25zdCBlbmRPZmZzZXQ6IFVpbnRTaXplID0gc3RyZWFtLmJ5dGVQb3M7XG5cbiAgaWYgKGFwcGVuZEVuZEFjdGlvbikge1xuICAgIGVtaXRFbmRBY3Rpb24oc3RyZWFtKTtcbiAgfVxuXG4gIGNvbnN0IGJ5dGVzOiBVaW50OEFycmF5ID0gc3RyZWFtLmdldEJ5dGVzKCk7XG5cbiAgY29uc3QgdmlldzogRGF0YVZpZXcgPSBuZXcgRGF0YVZpZXcoYnl0ZXMuYnVmZmVyLCBieXRlcy5ieXRlT2Zmc2V0LCBieXRlcy5ieXRlTGVuZ3RoKTtcbiAgZm9yIChjb25zdCBbb2Zmc2V0LCB0YXJnZXRMYWJlbF0gb2Ygd2kuanVtcHMpIHtcbiAgICBjb25zdCB0YXJnZXRPZmZzZXQ6IFVpbnRTaXplIHwgdW5kZWZpbmVkID0gdGFyZ2V0TGFiZWwgPT09IG51bGwgPyBlbmRPZmZzZXQgOiB3aS5ibG9ja3MuZ2V0KHRhcmdldExhYmVsKTtcbiAgICBpZiAodGFyZ2V0T2Zmc2V0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTGFiZWxOb3RGb3VuZDogJHt0YXJnZXRMYWJlbH1gKTtcbiAgICB9XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnJlc3RyaWN0LXBsdXMtb3BlcmFuZHNcbiAgICB2aWV3LnNldEludDE2KG9mZnNldCwgdGFyZ2V0T2Zmc2V0IC0gKG9mZnNldCArIEpVTVBfT0ZGU0VUX1NJWkUpLCB0cnVlKTtcbiAgfVxuICByZXR1cm4gYnl0ZXM7XG59XG5cbmludGVyZmFjZSBXcml0ZUluZm8ge1xuICBqdW1wczogTWFwPFVpbnRTaXplLCBOdWxsYWJsZUNmZ0xhYmVsPjtcbiAgYmxvY2tzOiBNYXA8Q2ZnTGFiZWwsIFVpbnRTaXplPjtcbn1cblxuZnVuY3Rpb24gZW1pdFNvZnRDZmcoXG4gIHN0cmVhbTogV3JpdGFibGVCeXRlU3RyZWFtLFxuICBjZmc6IENmZyxcbiAgZmFsbHRocm91Z2hOZXh0OiBOdWxsYWJsZUNmZ0xhYmVsLFxuKTogV3JpdGVJbmZvIHtcbiAgY29uc3QganVtcHM6IE1hcDxVaW50U2l6ZSwgTnVsbGFibGVDZmdMYWJlbD4gPSBuZXcgTWFwKCk7XG4gIGNvbnN0IGJsb2NrczogTWFwPENmZ0xhYmVsLCBVaW50U2l6ZT4gPSBuZXcgTWFwKCk7XG5cbiAgY29uc3QgYmxvY2tMaXN0OiBSZWFkb25seUFycmF5PENmZ0Jsb2NrPiA9IFtjZmcuaGVhZCwgLi4uY2ZnLnRhaWxdO1xuXG4gIGZvciAobGV0IGk6IFVpbnRTaXplID0gMDsgaSA8IGJsb2NrTGlzdC5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGJsb2NrOiBDZmdCbG9jayA9IGJsb2NrTGlzdFtpXTtcbiAgICBjb25zdCBjdXJOZXh0OiBOdWxsYWJsZUNmZ0xhYmVsID0gaSA8IGJsb2NrTGlzdC5sZW5ndGggLSAxID8gYmxvY2tMaXN0W2kgKyAxXS5sYWJlbCA6IGZhbGx0aHJvdWdoTmV4dDtcblxuICAgIGNvbnN0IHdpOiBXcml0ZUluZm8gPSBlbWl0QmxvY2soc3RyZWFtLCBibG9jaywgY3VyTmV4dCk7XG4gICAgZm9yIChjb25zdCBbb2Zmc2V0LCB0YXJnZXRdIG9mIHdpLmp1bXBzKSB7XG4gICAgICBqdW1wcy5zZXQob2Zmc2V0LCB0YXJnZXQpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IFtsYWJlbCwgb2Zmc2V0XSBvZiB3aS5ibG9ja3MpIHtcbiAgICAgIGJsb2Nrcy5zZXQobGFiZWwsIG9mZnNldCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtqdW1wcywgYmxvY2tzfTtcbn1cblxuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmN5Y2xvbWF0aWMtY29tcGxleGl0eVxuZnVuY3Rpb24gZW1pdEJsb2NrKFxuICBzdHJlYW06IFdyaXRhYmxlQnl0ZVN0cmVhbSxcbiAgYmxvY2s6IENmZ0Jsb2NrLFxuICBmYWxsdGhyb3VnaE5leHQ6IE51bGxhYmxlQ2ZnTGFiZWwsXG4pOiBXcml0ZUluZm8ge1xuICBjb25zdCBqdW1wczogTWFwPFVpbnRTaXplLCBOdWxsYWJsZUNmZ0xhYmVsPiA9IG5ldyBNYXAoKTtcbiAgY29uc3QgYmxvY2tzOiBNYXA8Q2ZnTGFiZWwsIFVpbnRTaXplPiA9IG5ldyBNYXAoKTtcblxuICBibG9ja3Muc2V0KGJsb2NrLmxhYmVsLCBzdHJlYW0uYnl0ZVBvcyk7XG5cbiAgZm9yIChjb25zdCBhY3Rpb24gb2YgYmxvY2suYWN0aW9ucykge1xuICAgIHN3aXRjaCAoYWN0aW9uLmFjdGlvbikge1xuICAgICAgY2FzZSBBY3Rpb25UeXBlLkRlZmluZUZ1bmN0aW9uOlxuICAgICAgICBlbWl0RGVmaW5lRnVuY3Rpb25BY3Rpb24oc3RyZWFtLCBhY3Rpb24pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgQWN0aW9uVHlwZS5EZWZpbmVGdW5jdGlvbjI6XG4gICAgICAgIGVtaXREZWZpbmVGdW5jdGlvbjJBY3Rpb24oc3RyZWFtLCBhY3Rpb24pO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGVtaXRBY3Rpb24oc3RyZWFtLCBhY3Rpb24pO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgc3dpdGNoIChibG9jay50eXBlKSB7XG4gICAgY2FzZSBDZmdCbG9ja1R5cGUuRXJyb3I6XG4gICAgICBlbWl0RXJyb3Ioc3RyZWFtKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgQ2ZnQmxvY2tUeXBlLklmOlxuICAgICAganVtcHMuc2V0KGVtaXRJZkFjdGlvbihzdHJlYW0pLCBibG9jay5pZlRydWUpO1xuICAgICAgaWYgKGZhbGx0aHJvdWdoTmV4dCAhPT0gYmxvY2suaWZGYWxzZSkge1xuICAgICAgICBpZiAoYmxvY2suaWZGYWxzZSA9PT0gbnVsbCkge1xuICAgICAgICAgIGVtaXRFbmRBY3Rpb24oc3RyZWFtKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBqdW1wcy5zZXQoZW1pdEp1bXBBY3Rpb24oc3RyZWFtKSwgYmxvY2suaWZGYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgQ2ZnQmxvY2tUeXBlLlNpbXBsZTpcbiAgICAgIGlmIChmYWxsdGhyb3VnaE5leHQgIT09IGJsb2NrLm5leHQpIHtcbiAgICAgICAgaWYgKGJsb2NrLm5leHQgPT09IG51bGwpIHtcbiAgICAgICAgICBlbWl0RW5kQWN0aW9uKHN0cmVhbSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAganVtcHMuc2V0KGVtaXRKdW1wQWN0aW9uKHN0cmVhbSksIGJsb2NrLm5leHQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIENmZ0Jsb2NrVHlwZS5SZXR1cm46XG4gICAgICBlbWl0QWN0aW9uKHN0cmVhbSwge2FjdGlvbjogQWN0aW9uVHlwZS5SZXR1cm59KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgQ2ZnQmxvY2tUeXBlLlRocm93OlxuICAgICAgZW1pdEFjdGlvbihzdHJlYW0sIHthY3Rpb246IEFjdGlvblR5cGUuVGhyb3d9KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgQ2ZnQmxvY2tUeXBlLlRyeToge1xuICAgICAgY29uc3QgZmluYWxseU5leHQ6IE51bGxhYmxlQ2ZnTGFiZWwgPSBmYWxsdGhyb3VnaE5leHQ7XG4gICAgICBjb25zdCBjYXRjaE5leHQ6IE51bGxhYmxlQ2ZnTGFiZWwgPSBibG9jay5maW5hbGx5ICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyBibG9jay5maW5hbGx5LmhlYWQubGFiZWxcbiAgICAgICAgOiBmaW5hbGx5TmV4dDtcbiAgICAgIGNvbnN0IHRyeU5leHQ6IE51bGxhYmxlQ2ZnTGFiZWwgPSBibG9jay5jYXRjaCAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gYmxvY2suY2F0Y2guaGVhZC5sYWJlbFxuICAgICAgICA6IGNhdGNoTmV4dDtcblxuICAgICAgY29uc3QgdHJ5U3RyZWFtOiBXcml0YWJsZUJ5dGVTdHJlYW0gPSBuZXcgV3JpdGFibGVTdHJlYW0oKTtcbiAgICAgIGNvbnN0IHRyeVdpOiBXcml0ZUluZm8gPSBlbWl0U29mdENmZyh0cnlTdHJlYW0sIGJsb2NrLnRyeSwgdHJ5TmV4dCk7XG5cbiAgICAgIGNvbnN0IGNhdGNoU3RyZWFtOiBXcml0YWJsZUJ5dGVTdHJlYW0gPSBuZXcgV3JpdGFibGVTdHJlYW0oKTtcbiAgICAgIGxldCBjYXRjaFdpOiBXcml0ZUluZm8gfCB1bmRlZmluZWQ7XG4gICAgICBpZiAoYmxvY2suY2F0Y2ggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjYXRjaFdpID0gZW1pdFNvZnRDZmcoY2F0Y2hTdHJlYW0sIGJsb2NrLmNhdGNoLCBjYXRjaE5leHQpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmaW5hbGx5U3RyZWFtOiBXcml0YWJsZUJ5dGVTdHJlYW0gPSBuZXcgV3JpdGFibGVTdHJlYW0oKTtcbiAgICAgIGxldCBmaW5hbGx5V2k6IFdyaXRlSW5mbyB8IHVuZGVmaW5lZDtcbiAgICAgIGlmIChibG9jay5maW5hbGx5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZmluYWxseVdpID0gZW1pdFNvZnRDZmcoZmluYWxseVN0cmVhbSwgYmxvY2suZmluYWxseSwgZmluYWxseU5leHQpO1xuICAgICAgfVxuXG4gICAgICBlbWl0QWN0aW9uKFxuICAgICAgICBzdHJlYW0sXG4gICAgICAgIHtcbiAgICAgICAgICBhY3Rpb246IEFjdGlvblR5cGUuVHJ5LFxuICAgICAgICAgIHRyeVNpemU6IHRyeVN0cmVhbS5ieXRlUG9zLFxuICAgICAgICAgIGNhdGNoU2l6ZTogY2F0Y2hXaSAhPT0gdW5kZWZpbmVkID8gY2F0Y2hTdHJlYW0uYnl0ZVBvcyA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBjYXRjaFRhcmdldDogYmxvY2suY2F0Y2hUYXJnZXQsXG4gICAgICAgICAgZmluYWxseVNpemU6IGZpbmFsbHlXaSAhPT0gdW5kZWZpbmVkID8gZmluYWxseVN0cmVhbS5ieXRlUG9zIDogdW5kZWZpbmVkLFxuICAgICAgICB9LFxuICAgICAgKTtcblxuICAgICAgZm9yIChjb25zdCBbb2Zmc2V0LCB0YXJnZXRdIG9mIHRyeVdpLmp1bXBzKSB7XG4gICAgICAgIGp1bXBzLnNldChzdHJlYW0uYnl0ZVBvcyArIG9mZnNldCwgdGFyZ2V0KTtcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgW2xhYmVsLCBvZmZzZXRdIG9mIHRyeVdpLmJsb2Nrcykge1xuICAgICAgICBibG9ja3Muc2V0KGxhYmVsLCBzdHJlYW0uYnl0ZVBvcyArIG9mZnNldCk7XG4gICAgICB9XG4gICAgICBzdHJlYW0ud3JpdGUodHJ5U3RyZWFtKTtcblxuICAgICAgaWYgKGNhdGNoV2kgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBmb3IgKGNvbnN0IFtvZmZzZXQsIHRhcmdldF0gb2YgY2F0Y2hXaS5qdW1wcykge1xuICAgICAgICAgIGp1bXBzLnNldChzdHJlYW0uYnl0ZVBvcyArIG9mZnNldCwgdGFyZ2V0KTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IFtsYWJlbCwgb2Zmc2V0XSBvZiBjYXRjaFdpLmJsb2Nrcykge1xuICAgICAgICAgIGJsb2Nrcy5zZXQobGFiZWwsIHN0cmVhbS5ieXRlUG9zICsgb2Zmc2V0KTtcbiAgICAgICAgfVxuICAgICAgICBzdHJlYW0ud3JpdGUoY2F0Y2hTdHJlYW0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoZmluYWxseVdpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZm9yIChjb25zdCBbb2Zmc2V0LCB0YXJnZXRdIG9mIGZpbmFsbHlXaS5qdW1wcykge1xuICAgICAgICAgIGp1bXBzLnNldChzdHJlYW0uYnl0ZVBvcyArIG9mZnNldCwgdGFyZ2V0KTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IFtsYWJlbCwgb2Zmc2V0XSBvZiBmaW5hbGx5V2kuYmxvY2tzKSB7XG4gICAgICAgICAgYmxvY2tzLnNldChsYWJlbCwgc3RyZWFtLmJ5dGVQb3MgKyBvZmZzZXQpO1xuICAgICAgICB9XG4gICAgICAgIHN0cmVhbS53cml0ZShmaW5hbGx5U3RyZWFtKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlIENmZ0Jsb2NrVHlwZS5XYWl0Rm9yRnJhbWU6XG4gICAgICBlbWl0QWN0aW9uKHN0cmVhbSwge2FjdGlvbjogQWN0aW9uVHlwZS5XYWl0Rm9yRnJhbWUsIGZyYW1lOiBibG9jay5mcmFtZSwgc2tpcENvdW50OiAxfSk7XG4gICAgICBqdW1wcy5zZXQoZW1pdEp1bXBBY3Rpb24oc3RyZWFtKSwgYmxvY2suaWZMb2FkZWQpO1xuICAgICAganVtcHMuc2V0KGVtaXRKdW1wQWN0aW9uKHN0cmVhbSksIGJsb2NrLmlmTm90TG9hZGVkKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgQ2ZnQmxvY2tUeXBlLldhaXRGb3JGcmFtZTI6XG4gICAgICBlbWl0QWN0aW9uKHN0cmVhbSwge2FjdGlvbjogQWN0aW9uVHlwZS5XYWl0Rm9yRnJhbWUyLCBza2lwQ291bnQ6IDF9KTtcbiAgICAgIGp1bXBzLnNldChlbWl0SnVtcEFjdGlvbihzdHJlYW0pLCBibG9jay5pZkxvYWRlZCk7XG4gICAgICBqdW1wcy5zZXQoZW1pdEp1bXBBY3Rpb24oc3RyZWFtKSwgYmxvY2suaWZOb3RMb2FkZWQpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBDZmdCbG9ja1R5cGUuV2l0aDoge1xuICAgICAgY29uc3Qgd2l0aFN0cmVhbTogV3JpdGFibGVCeXRlU3RyZWFtID0gbmV3IFdyaXRhYmxlU3RyZWFtKCk7XG4gICAgICBjb25zdCB3aXRoV2k6IFdyaXRlSW5mbyA9IGVtaXRTb2Z0Q2ZnKHdpdGhTdHJlYW0sIGJsb2NrLndpdGgsIGZhbGx0aHJvdWdoTmV4dCk7XG4gICAgICBlbWl0QWN0aW9uKHN0cmVhbSwge2FjdGlvbjogQWN0aW9uVHlwZS5XaXRoLCB3aXRoU2l6ZTogd2l0aFN0cmVhbS5ieXRlUG9zfSk7XG4gICAgICBmb3IgKGNvbnN0IFtvZmZzZXQsIHRhcmdldF0gb2Ygd2l0aFdpLmp1bXBzKSB7XG4gICAgICAgIGp1bXBzLnNldChzdHJlYW0uYnl0ZVBvcyArIG9mZnNldCwgdGFyZ2V0KTtcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgW2xhYmVsLCBvZmZzZXRdIG9mIHdpdGhXaS5ibG9ja3MpIHtcbiAgICAgICAgYmxvY2tzLnNldChsYWJlbCwgc3RyZWFtLmJ5dGVQb3MgKyBvZmZzZXQpO1xuICAgICAgfVxuICAgICAgc3RyZWFtLndyaXRlKHdpdGhTdHJlYW0pO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkQ2ZnQmxvY2tUeXBlXCIpO1xuICB9XG4gIHJldHVybiB7anVtcHMsIGJsb2Nrc307XG59XG5cbmZ1bmN0aW9uIGVtaXREZWZpbmVGdW5jdGlvbkFjdGlvbihieXRlU3RyZWFtOiBXcml0YWJsZUJ5dGVTdHJlYW0sIGFjdGlvbjogQ2ZnRGVmaW5lRnVuY3Rpb24pOiB2b2lkIHtcbiAgY29uc3QgYm9keTogVWludDhBcnJheSA9IGVtaXRIYXJkQ2ZnKGFjdGlvbi5ib2R5LCBmYWxzZSk7XG4gIGVtaXRBY3Rpb24oYnl0ZVN0cmVhbSwgey4uLmFjdGlvbiwgYm9keVNpemU6IGJvZHkubGVuZ3RofSk7XG4gIGJ5dGVTdHJlYW0ud3JpdGVCeXRlcyhib2R5KTtcbn1cblxuZnVuY3Rpb24gZW1pdERlZmluZUZ1bmN0aW9uMkFjdGlvbihcbiAgYnl0ZVN0cmVhbTogV3JpdGFibGVCeXRlU3RyZWFtLFxuICBhY3Rpb246IENmZ0RlZmluZUZ1bmN0aW9uMixcbik6IHZvaWQge1xuICBjb25zdCBib2R5OiBVaW50OEFycmF5ID0gZW1pdEhhcmRDZmcoYWN0aW9uLmJvZHksIGZhbHNlKTtcbiAgZW1pdEFjdGlvbihieXRlU3RyZWFtLCB7Li4uYWN0aW9uLCBib2R5U2l6ZTogYm9keS5sZW5ndGh9KTtcbiAgYnl0ZVN0cmVhbS53cml0ZUJ5dGVzKGJvZHkpO1xufVxuXG5mdW5jdGlvbiBlbWl0RW5kQWN0aW9uKGJ5dGVTdHJlYW06IFdyaXRhYmxlQnl0ZVN0cmVhbSk6IHZvaWQge1xuICBieXRlU3RyZWFtLndyaXRlVWludDgoMHgwMCk7XG59XG5cbmZ1bmN0aW9uIGVtaXRJZkFjdGlvbihieXRlU3RyZWFtOiBXcml0YWJsZUJ5dGVTdHJlYW0pOiBVaW50U2l6ZSB7XG4gIGVtaXRBY3Rpb24oYnl0ZVN0cmVhbSwge2FjdGlvbjogQWN0aW9uVHlwZS5JZiwgb2Zmc2V0OiAwfSk7XG4gIHJldHVybiBieXRlU3RyZWFtLmJ5dGVQb3MgLSBKVU1QX09GRlNFVF9TSVpFO1xufVxuXG5mdW5jdGlvbiBlbWl0SnVtcEFjdGlvbihieXRlU3RyZWFtOiBXcml0YWJsZUJ5dGVTdHJlYW0pOiBVaW50U2l6ZSB7XG4gIGVtaXRBY3Rpb24oYnl0ZVN0cmVhbSwge2FjdGlvbjogQWN0aW9uVHlwZS5KdW1wLCBvZmZzZXQ6IDB9KTtcbiAgcmV0dXJuIGJ5dGVTdHJlYW0uYnl0ZVBvcyAtIEpVTVBfT0ZGU0VUX1NJWkU7XG59XG5cbmZ1bmN0aW9uIGVtaXRFcnJvcihieXRlU3RyZWFtOiBXcml0YWJsZUJ5dGVTdHJlYW0pOiB2b2lkIHtcbiAgYnl0ZVN0cmVhbS53cml0ZVVpbnQ4KDB4OTYpOyAvLyBwdXNoIGNvZGVcbiAgYnl0ZVN0cmVhbS53cml0ZVVpbnQxNkxFKDB4MDAwMSk7IC8vIGRhdGEgbGVuZ3RoICgxKVxuICBieXRlU3RyZWFtLndyaXRlVWludDgoMHhmZik7IC8vIGludmFsaWQgcHVzaCB2YWx1ZSB0eXBlIGNvZGUgKDB4ZmYpXG59XG4iXSwic291cmNlUm9vdCI6IiJ9 | ||
//# sourceMappingURL=data:application/json;charset=utf8;base64,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VUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsc0NBQXNDO0FBQ3JFLENBQUMiLCJmaWxlIjoiY2ZnLXRvLWJ5dGVzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gdHNsaW50OmRpc2FibGU6cmVzdHJpY3QtcGx1cy1vcGVyYW5kc1xuXG5pbXBvcnQgeyBXcml0YWJsZUJ5dGVTdHJlYW0sIFdyaXRhYmxlU3RyZWFtIH0gZnJvbSBcIkBvcGVuLWZsYXNoL3N0cmVhbVwiO1xuaW1wb3J0IHsgQWN0aW9uVHlwZSB9IGZyb20gXCJhdm0xLXR5cGVzL2FjdGlvbi10eXBlXCI7XG5pbXBvcnQgeyBEZWZpbmVGdW5jdGlvbiBhcyBDZmdEZWZpbmVGdW5jdGlvbiB9IGZyb20gXCJhdm0xLXR5cGVzL2NmZy9hY3Rpb25zL2RlZmluZS1mdW5jdGlvblwiO1xuaW1wb3J0IHsgRGVmaW5lRnVuY3Rpb24yIGFzIENmZ0RlZmluZUZ1bmN0aW9uMiB9IGZyb20gXCJhdm0xLXR5cGVzL2NmZy9hY3Rpb25zL2RlZmluZS1mdW5jdGlvbjJcIjtcbmltcG9ydCB7IENmZyB9IGZyb20gXCJhdm0xLXR5cGVzL2NmZy9jZmdcIjtcbmltcG9ydCB7IENmZ0Jsb2NrIH0gZnJvbSBcImF2bTEtdHlwZXMvY2ZnL2NmZy1ibG9ja1wiO1xuaW1wb3J0IHsgQ2ZnRmxvdyB9IGZyb20gXCJhdm0xLXR5cGVzL2NmZy9jZmctZmxvd1wiO1xuaW1wb3J0IHsgQ2ZnRmxvd1R5cGUgfSBmcm9tIFwiYXZtMS10eXBlcy9jZmcvY2ZnLWZsb3ctdHlwZVwiO1xuaW1wb3J0IHsgQ2ZnTGFiZWwsIE51bGxhYmxlQ2ZnTGFiZWwgfSBmcm9tIFwiYXZtMS10eXBlcy9jZmcvY2ZnLWxhYmVsXCI7XG5pbXBvcnQgeyBUcnkgYXMgUmF3VHJ5IH0gZnJvbSBcImF2bTEtdHlwZXMvcmF3L2FjdGlvbnMvdHJ5XCI7XG5pbXBvcnQgeyBDYXRjaEJsb2NrIGFzIFJhd0NhdGNoQmxvY2sgfSBmcm9tIFwiYXZtMS10eXBlcy9yYXcvY2F0Y2gtYmxvY2tcIjtcbmltcG9ydCB7IFVpbnRTaXplIH0gZnJvbSBcInNlbWFudGljLXR5cGVzXCI7XG5pbXBvcnQgeyBlbWl0QWN0aW9uIH0gZnJvbSBcIi4vZW1pdHRlcnMvYXZtMVwiO1xuXG4vKipcbiAqIFNpemUgb2YgdGhlIG9mZnNldCBpbiBgSWZgIGFuZCBgSnVtcGAgYWN0aW9ucyAoaW4gYnl0ZXMpLlxuICovXG5jb25zdCBKVU1QX09GRlNFVF9TSVpFOiBVaW50U2l6ZSA9IDI7XG5cbmV4cG9ydCBmdW5jdGlvbiBjZmdUb0J5dGVzKGNmZzogQ2ZnKTogVWludDhBcnJheSB7XG4gIHJldHVybiBlbWl0SGFyZENmZyhjZmcsIHRydWUpO1xufVxuXG5mdW5jdGlvbiBlbWl0SGFyZENmZyhjZmc6IENmZywgYXBwZW5kRW5kQWN0aW9uOiBib29sZWFuKTogVWludDhBcnJheSB7XG4gIGNvbnN0IHN0cmVhbTogV3JpdGFibGVCeXRlU3RyZWFtID0gbmV3IFdyaXRhYmxlU3RyZWFtKCk7XG4gIGNvbnN0IHdpOiBXcml0ZUluZm8gPSBlbWl0U29mdENmZyhzdHJlYW0sIGNmZywgbnVsbCk7XG4gIGNvbnN0IGVuZE9mZnNldDogVWludFNpemUgPSBzdHJlYW0uYnl0ZVBvcztcblxuICBpZiAoYXBwZW5kRW5kQWN0aW9uKSB7XG4gICAgZW1pdEVuZEFjdGlvbihzdHJlYW0pO1xuICB9XG5cbiAgY29uc3QgYnl0ZXM6IFVpbnQ4QXJyYXkgPSBzdHJlYW0uZ2V0Qnl0ZXMoKTtcblxuICBjb25zdCB2aWV3OiBEYXRhVmlldyA9IG5ldyBEYXRhVmlldyhieXRlcy5idWZmZXIsIGJ5dGVzLmJ5dGVPZmZzZXQsIGJ5dGVzLmJ5dGVMZW5ndGgpO1xuICBmb3IgKGNvbnN0IFtvZmZzZXQsIHRhcmdldExhYmVsXSBvZiB3aS5qdW1wcykge1xuICAgIGNvbnN0IHRhcmdldE9mZnNldDogVWludFNpemUgfCB1bmRlZmluZWQgPSB0YXJnZXRMYWJlbCA9PT0gbnVsbCA/IGVuZE9mZnNldCA6IHdpLmJsb2Nrcy5nZXQodGFyZ2V0TGFiZWwpO1xuICAgIGlmICh0YXJnZXRPZmZzZXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBMYWJlbE5vdEZvdW5kOiAke3RhcmdldExhYmVsfWApO1xuICAgIH1cbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6cmVzdHJpY3QtcGx1cy1vcGVyYW5kc1xuICAgIHZpZXcuc2V0SW50MTYob2Zmc2V0LCB0YXJnZXRPZmZzZXQgLSAob2Zmc2V0ICsgSlVNUF9PRkZTRVRfU0laRSksIHRydWUpO1xuICB9XG4gIHJldHVybiBieXRlcztcbn1cblxuaW50ZXJmYWNlIFdyaXRlSW5mbyB7XG4gIGp1bXBzOiBNYXA8VWludFNpemUsIE51bGxhYmxlQ2ZnTGFiZWw+O1xuICBibG9ja3M6IE1hcDxDZmdMYWJlbCwgVWludFNpemU+O1xufVxuXG5mdW5jdGlvbiBlbWl0U29mdENmZyhcbiAgc3RyZWFtOiBXcml0YWJsZUJ5dGVTdHJlYW0sXG4gIGNmZzogQ2ZnLFxuICBmYWxsdGhyb3VnaE5leHQ6IE51bGxhYmxlQ2ZnTGFiZWwsXG4pOiBXcml0ZUluZm8ge1xuICBjb25zdCBqdW1wczogTWFwPFVpbnRTaXplLCBOdWxsYWJsZUNmZ0xhYmVsPiA9IG5ldyBNYXAoKTtcbiAgY29uc3QgYmxvY2tzOiBNYXA8Q2ZnTGFiZWwsIFVpbnRTaXplPiA9IG5ldyBNYXAoKTtcblxuICBjb25zdCBibG9ja0xpc3Q6IFJlYWRvbmx5QXJyYXk8Q2ZnQmxvY2s+ID0gY2ZnLmJsb2NrcztcblxuICBmb3IgKGxldCBpOiBVaW50U2l6ZSA9IDA7IGkgPCBibG9ja0xpc3QubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBibG9jazogQ2ZnQmxvY2sgPSBibG9ja0xpc3RbaV07XG4gICAgY29uc3QgY3VyTmV4dDogTnVsbGFibGVDZmdMYWJlbCA9IGkgPCBibG9ja0xpc3QubGVuZ3RoIC0gMSA/IGJsb2NrTGlzdFtpICsgMV0ubGFiZWwgOiBmYWxsdGhyb3VnaE5leHQ7XG5cbiAgICBjb25zdCB3aTogV3JpdGVJbmZvID0gZW1pdEJsb2NrKHN0cmVhbSwgYmxvY2ssIGN1ck5leHQpO1xuICAgIGZvciAoY29uc3QgW29mZnNldCwgdGFyZ2V0XSBvZiB3aS5qdW1wcykge1xuICAgICAganVtcHMuc2V0KG9mZnNldCwgdGFyZ2V0KTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBbbGFiZWwsIG9mZnNldF0gb2Ygd2kuYmxvY2tzKSB7XG4gICAgICBibG9ja3Muc2V0KGxhYmVsLCBvZmZzZXQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7anVtcHMsIGJsb2Nrc307XG59XG5cbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpjeWNsb21hdGljLWNvbXBsZXhpdHlcbmZ1bmN0aW9uIGVtaXRCbG9jayhcbiAgc3RyZWFtOiBXcml0YWJsZUJ5dGVTdHJlYW0sXG4gIGJsb2NrOiBDZmdCbG9jayxcbiAgZmFsbHRocm91Z2hOZXh0OiBOdWxsYWJsZUNmZ0xhYmVsLFxuKTogV3JpdGVJbmZvIHtcbiAgY29uc3QganVtcHM6IE1hcDxVaW50U2l6ZSwgTnVsbGFibGVDZmdMYWJlbD4gPSBuZXcgTWFwKCk7XG4gIGNvbnN0IGJsb2NrczogTWFwPENmZ0xhYmVsLCBVaW50U2l6ZT4gPSBuZXcgTWFwKCk7XG5cbiAgYmxvY2tzLnNldChibG9jay5sYWJlbCwgc3RyZWFtLmJ5dGVQb3MpO1xuXG4gIGZvciAoY29uc3QgYWN0aW9uIG9mIGJsb2NrLmFjdGlvbnMpIHtcbiAgICBzd2l0Y2ggKGFjdGlvbi5hY3Rpb24pIHtcbiAgICAgIGNhc2UgQWN0aW9uVHlwZS5EZWZpbmVGdW5jdGlvbjpcbiAgICAgICAgZW1pdERlZmluZUZ1bmN0aW9uQWN0aW9uKHN0cmVhbSwgYWN0aW9uKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEFjdGlvblR5cGUuRGVmaW5lRnVuY3Rpb24yOlxuICAgICAgICBlbWl0RGVmaW5lRnVuY3Rpb24yQWN0aW9uKHN0cmVhbSwgYWN0aW9uKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBlbWl0QWN0aW9uKHN0cmVhbSwgYWN0aW9uKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIGNvbnN0IGZsb3c6IENmZ0Zsb3cgPSBibG9jay5mbG93O1xuICBzd2l0Y2ggKGZsb3cudHlwZSkge1xuICAgIGNhc2UgQ2ZnRmxvd1R5cGUuRXJyb3I6XG4gICAgICBlbWl0RXJyb3Ioc3RyZWFtKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgQ2ZnRmxvd1R5cGUuSWY6XG4gICAgICBqdW1wcy5zZXQoZW1pdElmQWN0aW9uKHN0cmVhbSksIGZsb3cudHJ1ZVRhcmdldCk7XG4gICAgICBpZiAoZmFsbHRocm91Z2hOZXh0ICE9PSBmbG93LmZhbHNlVGFyZ2V0KSB7XG4gICAgICAgIGlmIChmbG93LmZhbHNlVGFyZ2V0ID09PSBudWxsKSB7XG4gICAgICAgICAgZW1pdEVuZEFjdGlvbihzdHJlYW0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGp1bXBzLnNldChlbWl0SnVtcEFjdGlvbihzdHJlYW0pLCBmbG93LmZhbHNlVGFyZ2V0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSBDZmdGbG93VHlwZS5TaW1wbGU6XG4gICAgICBpZiAoZmFsbHRocm91Z2hOZXh0ICE9PSBmbG93Lm5leHQpIHtcbiAgICAgICAgaWYgKGZsb3cubmV4dCA9PT0gbnVsbCkge1xuICAgICAgICAgIGVtaXRFbmRBY3Rpb24oc3RyZWFtKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBqdW1wcy5zZXQoZW1pdEp1bXBBY3Rpb24oc3RyZWFtKSwgZmxvdy5uZXh0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSBDZmdGbG93VHlwZS5SZXR1cm46XG4gICAgICBlbWl0QWN0aW9uKHN0cmVhbSwge2FjdGlvbjogQWN0aW9uVHlwZS5SZXR1cm59KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgQ2ZnRmxvd1R5cGUuVGhyb3c6XG4gICAgICBlbWl0QWN0aW9uKHN0cmVhbSwge2FjdGlvbjogQWN0aW9uVHlwZS5UaHJvd30pO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBDZmdGbG93VHlwZS5Ucnk6IHtcbiAgICAgIGNvbnN0IGZpbmFsbHlOZXh0OiBOdWxsYWJsZUNmZ0xhYmVsID0gZmFsbHRocm91Z2hOZXh0O1xuICAgICAgY29uc3QgY2F0Y2hOZXh0OiBOdWxsYWJsZUNmZ0xhYmVsID0gZmxvdy5maW5hbGx5ICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyBmbG93LmZpbmFsbHkuYmxvY2tzWzBdLmxhYmVsXG4gICAgICAgIDogZmluYWxseU5leHQ7XG4gICAgICBjb25zdCB0cnlOZXh0OiBOdWxsYWJsZUNmZ0xhYmVsID0gZmxvdy5jYXRjaCAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gZmxvdy5jYXRjaC5ib2R5LmJsb2Nrc1swXS5sYWJlbFxuICAgICAgICA6IGNhdGNoTmV4dDtcblxuICAgICAgY29uc3QgdHJ5U3RyZWFtOiBXcml0YWJsZUJ5dGVTdHJlYW0gPSBuZXcgV3JpdGFibGVTdHJlYW0oKTtcbiAgICAgIGNvbnN0IHRyeVdpOiBXcml0ZUluZm8gPSBlbWl0U29mdENmZyh0cnlTdHJlYW0sIGZsb3cudHJ5LCB0cnlOZXh0KTtcblxuICAgICAgY29uc3QgY2F0Y2hTdHJlYW06IFdyaXRhYmxlQnl0ZVN0cmVhbSA9IG5ldyBXcml0YWJsZVN0cmVhbSgpO1xuICAgICAgbGV0IHJhd0NhdGNoOiB7YmxvY2s6IFJhd0NhdGNoQmxvY2s7IGluZm86IFdyaXRlSW5mb30gfCB1bmRlZmluZWQ7XG4gICAgICBpZiAoZmxvdy5jYXRjaCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IGluZm86IFdyaXRlSW5mbyA9IGVtaXRTb2Z0Q2ZnKGNhdGNoU3RyZWFtLCBmbG93LmNhdGNoLmJvZHksIGNhdGNoTmV4dCk7XG4gICAgICAgIGNvbnN0IGJsb2NrOiBSYXdDYXRjaEJsb2NrID0ge1xuICAgICAgICAgIHRhcmdldDogZmxvdy5jYXRjaC50YXJnZXQsXG4gICAgICAgICAgc2l6ZTogY2F0Y2hTdHJlYW0uYnl0ZVBvcyxcbiAgICAgICAgfTtcbiAgICAgICAgcmF3Q2F0Y2ggPSB7YmxvY2ssIGluZm99O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmaW5hbGx5U3RyZWFtOiBXcml0YWJsZUJ5dGVTdHJlYW0gPSBuZXcgV3JpdGFibGVTdHJlYW0oKTtcbiAgICAgIGxldCBmaW5hbGx5V2k6IFdyaXRlSW5mbyB8IHVuZGVmaW5lZDtcbiAgICAgIGlmIChmbG93LmZpbmFsbHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBmaW5hbGx5V2kgPSBlbWl0U29mdENmZyhmaW5hbGx5U3RyZWFtLCBmbG93LmZpbmFsbHksIGZpbmFsbHlOZXh0KTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmF3VHJ5OiBSYXdUcnkgPSB7XG4gICAgICAgIGFjdGlvbjogQWN0aW9uVHlwZS5UcnksXG4gICAgICAgIHRyeTogdHJ5U3RyZWFtLmJ5dGVQb3MsXG4gICAgICAgIGNhdGNoOiByYXdDYXRjaCAhPT0gdW5kZWZpbmVkID8gcmF3Q2F0Y2guYmxvY2sgOiB1bmRlZmluZWQsXG4gICAgICAgIGZpbmFsbHk6IGZpbmFsbHlXaSAhPT0gdW5kZWZpbmVkID8gZmluYWxseVN0cmVhbS5ieXRlUG9zIDogdW5kZWZpbmVkLFxuICAgICAgfTtcblxuICAgICAgZW1pdEFjdGlvbihzdHJlYW0sIHJhd1RyeSk7XG5cbiAgICAgIGZvciAoY29uc3QgW29mZnNldCwgdGFyZ2V0XSBvZiB0cnlXaS5qdW1wcykge1xuICAgICAgICBqdW1wcy5zZXQoc3RyZWFtLmJ5dGVQb3MgKyBvZmZzZXQsIHRhcmdldCk7XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IFtsYWJlbCwgb2Zmc2V0XSBvZiB0cnlXaS5ibG9ja3MpIHtcbiAgICAgICAgYmxvY2tzLnNldChsYWJlbCwgc3RyZWFtLmJ5dGVQb3MgKyBvZmZzZXQpO1xuICAgICAgfVxuICAgICAgc3RyZWFtLndyaXRlKHRyeVN0cmVhbSk7XG5cbiAgICAgIGlmIChyYXdDYXRjaCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGZvciAoY29uc3QgW29mZnNldCwgdGFyZ2V0XSBvZiByYXdDYXRjaC5pbmZvLmp1bXBzKSB7XG4gICAgICAgICAganVtcHMuc2V0KHN0cmVhbS5ieXRlUG9zICsgb2Zmc2V0LCB0YXJnZXQpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgW2xhYmVsLCBvZmZzZXRdIG9mIHJhd0NhdGNoLmluZm8uYmxvY2tzKSB7XG4gICAgICAgICAgYmxvY2tzLnNldChsYWJlbCwgc3RyZWFtLmJ5dGVQb3MgKyBvZmZzZXQpO1xuICAgICAgICB9XG4gICAgICAgIHN0cmVhbS53cml0ZShjYXRjaFN0cmVhbSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChmaW5hbGx5V2kgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBmb3IgKGNvbnN0IFtvZmZzZXQsIHRhcmdldF0gb2YgZmluYWxseVdpLmp1bXBzKSB7XG4gICAgICAgICAganVtcHMuc2V0KHN0cmVhbS5ieXRlUG9zICsgb2Zmc2V0LCB0YXJnZXQpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgW2xhYmVsLCBvZmZzZXRdIG9mIGZpbmFsbHlXaS5ibG9ja3MpIHtcbiAgICAgICAgICBibG9ja3Muc2V0KGxhYmVsLCBzdHJlYW0uYnl0ZVBvcyArIG9mZnNldCk7XG4gICAgICAgIH1cbiAgICAgICAgc3RyZWFtLndyaXRlKGZpbmFsbHlTdHJlYW0pO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgQ2ZnRmxvd1R5cGUuV2FpdEZvckZyYW1lOlxuICAgICAgZW1pdEFjdGlvbihzdHJlYW0sIHthY3Rpb246IEFjdGlvblR5cGUuV2FpdEZvckZyYW1lLCBmcmFtZTogZmxvdy5mcmFtZSwgc2tpcDogMX0pO1xuICAgICAganVtcHMuc2V0KGVtaXRKdW1wQWN0aW9uKHN0cmVhbSksIGZsb3cucmVhZHlUYXJnZXQpO1xuICAgICAganVtcHMuc2V0KGVtaXRKdW1wQWN0aW9uKHN0cmVhbSksIGZsb3cubG9hZGluZ1RhcmdldCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIENmZ0Zsb3dUeXBlLldhaXRGb3JGcmFtZTI6XG4gICAgICBlbWl0QWN0aW9uKHN0cmVhbSwge2FjdGlvbjogQWN0aW9uVHlwZS5XYWl0Rm9yRnJhbWUyLCBza2lwOiAxfSk7XG4gICAgICBqdW1wcy5zZXQoZW1pdEp1bXBBY3Rpb24oc3RyZWFtKSwgZmxvdy5yZWFkeVRhcmdldCk7XG4gICAgICBqdW1wcy5zZXQoZW1pdEp1bXBBY3Rpb24oc3RyZWFtKSwgZmxvdy5sb2FkaW5nVGFyZ2V0KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgQ2ZnRmxvd1R5cGUuV2l0aDoge1xuICAgICAgY29uc3Qgd2l0aFN0cmVhbTogV3JpdGFibGVCeXRlU3RyZWFtID0gbmV3IFdyaXRhYmxlU3RyZWFtKCk7XG4gICAgICBjb25zdCB3aXRoV2k6IFdyaXRlSW5mbyA9IGVtaXRTb2Z0Q2ZnKHdpdGhTdHJlYW0sIGZsb3cuYm9keSwgZmFsbHRocm91Z2hOZXh0KTtcbiAgICAgIGVtaXRBY3Rpb24oc3RyZWFtLCB7YWN0aW9uOiBBY3Rpb25UeXBlLldpdGgsIHNpemU6IHdpdGhTdHJlYW0uYnl0ZVBvc30pO1xuICAgICAgZm9yIChjb25zdCBbb2Zmc2V0LCB0YXJnZXRdIG9mIHdpdGhXaS5qdW1wcykge1xuICAgICAgICBqdW1wcy5zZXQoc3RyZWFtLmJ5dGVQb3MgKyBvZmZzZXQsIHRhcmdldCk7XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IFtsYWJlbCwgb2Zmc2V0XSBvZiB3aXRoV2kuYmxvY2tzKSB7XG4gICAgICAgIGJsb2Nrcy5zZXQobGFiZWwsIHN0cmVhbS5ieXRlUG9zICsgb2Zmc2V0KTtcbiAgICAgIH1cbiAgICAgIHN0cmVhbS53cml0ZSh3aXRoU3RyZWFtKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5leHBlY3RlZENmZ0Jsb2NrVHlwZVwiKTtcbiAgfVxuICByZXR1cm4ge2p1bXBzLCBibG9ja3N9O1xufVxuXG5mdW5jdGlvbiBlbWl0RGVmaW5lRnVuY3Rpb25BY3Rpb24oYnl0ZVN0cmVhbTogV3JpdGFibGVCeXRlU3RyZWFtLCBhY3Rpb246IENmZ0RlZmluZUZ1bmN0aW9uKTogdm9pZCB7XG4gIGNvbnN0IGJvZHk6IFVpbnQ4QXJyYXkgPSBlbWl0SGFyZENmZyhhY3Rpb24uYm9keSwgZmFsc2UpO1xuICBlbWl0QWN0aW9uKGJ5dGVTdHJlYW0sIHsuLi5hY3Rpb24sIGJvZHlTaXplOiBib2R5Lmxlbmd0aH0pO1xuICBieXRlU3RyZWFtLndyaXRlQnl0ZXMoYm9keSk7XG59XG5cbmZ1bmN0aW9uIGVtaXREZWZpbmVGdW5jdGlvbjJBY3Rpb24oXG4gIGJ5dGVTdHJlYW06IFdyaXRhYmxlQnl0ZVN0cmVhbSxcbiAgYWN0aW9uOiBDZmdEZWZpbmVGdW5jdGlvbjIsXG4pOiB2b2lkIHtcbiAgY29uc3QgYm9keTogVWludDhBcnJheSA9IGVtaXRIYXJkQ2ZnKGFjdGlvbi5ib2R5LCBmYWxzZSk7XG4gIGVtaXRBY3Rpb24oYnl0ZVN0cmVhbSwgey4uLmFjdGlvbiwgYm9keVNpemU6IGJvZHkubGVuZ3RofSk7XG4gIGJ5dGVTdHJlYW0ud3JpdGVCeXRlcyhib2R5KTtcbn1cblxuZnVuY3Rpb24gZW1pdEVuZEFjdGlvbihieXRlU3RyZWFtOiBXcml0YWJsZUJ5dGVTdHJlYW0pOiB2b2lkIHtcbiAgYnl0ZVN0cmVhbS53cml0ZVVpbnQ4KDB4MDApO1xufVxuXG5mdW5jdGlvbiBlbWl0SWZBY3Rpb24oYnl0ZVN0cmVhbTogV3JpdGFibGVCeXRlU3RyZWFtKTogVWludFNpemUge1xuICBlbWl0QWN0aW9uKGJ5dGVTdHJlYW0sIHthY3Rpb246IEFjdGlvblR5cGUuSWYsIG9mZnNldDogMH0pO1xuICByZXR1cm4gYnl0ZVN0cmVhbS5ieXRlUG9zIC0gSlVNUF9PRkZTRVRfU0laRTtcbn1cblxuZnVuY3Rpb24gZW1pdEp1bXBBY3Rpb24oYnl0ZVN0cmVhbTogV3JpdGFibGVCeXRlU3RyZWFtKTogVWludFNpemUge1xuICBlbWl0QWN0aW9uKGJ5dGVTdHJlYW0sIHthY3Rpb246IEFjdGlvblR5cGUuSnVtcCwgb2Zmc2V0OiAwfSk7XG4gIHJldHVybiBieXRlU3RyZWFtLmJ5dGVQb3MgLSBKVU1QX09GRlNFVF9TSVpFO1xufVxuXG5mdW5jdGlvbiBlbWl0RXJyb3IoYnl0ZVN0cmVhbTogV3JpdGFibGVCeXRlU3RyZWFtKTogdm9pZCB7XG4gIGJ5dGVTdHJlYW0ud3JpdGVVaW50OCgweDk2KTsgLy8gcHVzaCBjb2RlXG4gIGJ5dGVTdHJlYW0ud3JpdGVVaW50MTZMRSgweDAwMDEpOyAvLyBkYXRhIGxlbmd0aCAoMSlcbiAgYnl0ZVN0cmVhbS53cml0ZVVpbnQ4KDB4ZmYpOyAvLyBpbnZhbGlkIHB1c2ggdmFsdWUgdHlwZSBjb2RlICgweGZmKVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ== |
import { WritableByteStream as ByteStream } from "@open-flash/stream"; | ||
import { Action } from "avm1-types/action"; | ||
import * as actions from "avm1-types/actions/index"; | ||
import { Value } from "avm1-types/value"; | ||
import { PushValue } from "avm1-types/push-value"; | ||
import { Action as RawAction } from "avm1-types/raw/action"; | ||
import * as actions from "avm1-types/raw/actions/index"; | ||
import { Uint16, Uint8 } from "semantic-types"; | ||
@@ -11,3 +11,3 @@ export interface ActionHeader { | ||
export declare function emitActionHeader(byteStream: ByteStream, value: ActionHeader): void; | ||
export declare function emitAction(byteStream: ByteStream, value: Action): void; | ||
export declare function emitAction(byteStream: ByteStream, value: RawAction): void; | ||
export declare function emitGotoFrameAction(byteStream: ByteStream, value: actions.GotoFrame): void; | ||
@@ -38,3 +38,3 @@ export declare function emitGetUrlAction(byteStream: ByteStream, value: actions.GetUrl): void; | ||
export declare function emitPushAction(byteStream: ByteStream, value: actions.Push): void; | ||
export declare function emitActionValue(byteStream: ByteStream, value: Value): void; | ||
export declare function emitActionValue(byteStream: ByteStream, value: PushValue): void; | ||
export declare function emitJumpAction(byteStream: ByteStream, value: actions.Jump): void; | ||
@@ -41,0 +41,0 @@ export declare function emitGetUrl2Action(byteStream: ByteStream, value: actions.GetUrl2): void; |
@@ -7,3 +7,3 @@ "use strict"; | ||
const get_url2_method_1 = require("avm1-types/get-url2-method"); | ||
const value_type_1 = require("avm1-types/value-type"); | ||
const push_value_type_1 = require("avm1-types/push-value-type"); | ||
const incident_1 = require("incident"); | ||
@@ -143,4 +143,4 @@ function emitActionHeader(byteStream, value) { | ||
function emitGetUrlAction(byteStream, value) { | ||
byteStream.writeCString(value.url); | ||
byteStream.writeCString(value.target); | ||
byteStream.writeNulUtf8(value.url); | ||
byteStream.writeNulUtf8(value.target); | ||
} | ||
@@ -153,5 +153,5 @@ exports.emitGetUrlAction = emitGetUrlAction; | ||
function emitConstantPoolAction(byteStream, value) { | ||
byteStream.writeUint16LE(value.constantPool.length); | ||
for (const constant of value.constantPool) { | ||
byteStream.writeCString(constant); | ||
byteStream.writeUint16LE(value.pool.length); | ||
for (const constant of value.pool) { | ||
byteStream.writeNulUtf8(constant); | ||
} | ||
@@ -162,15 +162,15 @@ } | ||
byteStream.writeUint16LE(value.frame); | ||
byteStream.writeUint8(value.skipCount); | ||
byteStream.writeUint8(value.skip); | ||
} | ||
exports.emitWaitForFrameAction = emitWaitForFrameAction; | ||
function emitSetTargetAction(byteStream, value) { | ||
byteStream.writeCString(value.targetName); | ||
byteStream.writeNulUtf8(value.targetName); | ||
} | ||
exports.emitSetTargetAction = emitSetTargetAction; | ||
function emitGotoLabelAction(byteStream, value) { | ||
byteStream.writeCString(value.label); | ||
byteStream.writeNulUtf8(value.label); | ||
} | ||
exports.emitGotoLabelAction = emitGotoLabelAction; | ||
function emitWaitForFrame2Action(byteStream, value) { | ||
byteStream.writeUint8(value.skipCount); | ||
byteStream.writeUint8(value.skip); | ||
} | ||
@@ -185,3 +185,3 @@ exports.emitWaitForFrame2Action = emitWaitForFrame2Action; | ||
function emitDefineFunction2Action(byteStream, value) { | ||
byteStream.writeCString(value.name); | ||
byteStream.writeNulUtf8(value.name); | ||
byteStream.writeUint16LE(value.parameters.length); | ||
@@ -202,3 +202,3 @@ byteStream.writeUint8(value.registerCount); | ||
byteStream.writeUint8(parameter.register); | ||
byteStream.writeCString(parameter.name); | ||
byteStream.writeNulUtf8(parameter.name); | ||
} | ||
@@ -213,18 +213,18 @@ byteStream.writeUint16LE(value.bodySize); | ||
else { | ||
byteStream.writeCString(value.target); | ||
byteStream.writeNulUtf8(value.target); | ||
} | ||
} | ||
function emitTryAction(byteStream, value) { | ||
const catchInRegister = value.catchTarget !== undefined | ||
&& value.catchTarget.type === _type_1.CatchTargetType.Register; | ||
const catchInRegister = value.catch !== undefined | ||
&& value.catch.target.type === _type_1.CatchTargetType.Register; | ||
const flags = 0 | ||
| (value.catchSize !== undefined ? 1 << 0 : 0) | ||
| (value.finallySize !== undefined ? 1 << 1 : 0) | ||
| (value.catch !== undefined ? 1 << 0 : 0) | ||
| (value.finally !== undefined ? 1 << 1 : 0) | ||
| (catchInRegister ? 1 << 2 : 0); | ||
// (Skip 5 bits) | ||
byteStream.writeUint8(flags); | ||
byteStream.writeUint16LE(value.trySize); | ||
byteStream.writeUint16LE(value.catchSize !== undefined ? value.catchSize : 0); | ||
byteStream.writeUint16LE(value.finallySize !== undefined ? value.finallySize : 0); | ||
emitCatchTarget(byteStream, value.catchTarget); | ||
byteStream.writeUint16LE(value.try); | ||
byteStream.writeUint16LE(value.catch !== undefined ? value.catch.size : 0); | ||
byteStream.writeUint16LE(value.finally !== undefined ? value.finally : 0); | ||
emitCatchTarget(byteStream, value.catch !== undefined ? value.catch.target : { type: _type_1.CatchTargetType.Register, target: 0 }); | ||
} | ||
@@ -240,3 +240,3 @@ exports.emitTryAction = emitTryAction; | ||
function emitWithAction(byteStream, value) { | ||
byteStream.writeUint16LE(value.withSize); | ||
byteStream.writeUint16LE(value.size); | ||
} | ||
@@ -252,7 +252,7 @@ exports.emitWithAction = emitWithAction; | ||
switch (value.type) { | ||
case value_type_1.ValueType.Boolean: | ||
case push_value_type_1.PushValueType.Boolean: | ||
byteStream.writeUint8(5); | ||
byteStream.writeUint8(value.value ? 1 : 0); | ||
break; | ||
case value_type_1.ValueType.Constant: | ||
case push_value_type_1.PushValueType.Constant: | ||
if (value.value > 0xff) { | ||
@@ -267,26 +267,26 @@ byteStream.writeUint8(9); | ||
break; | ||
case value_type_1.ValueType.String: | ||
case push_value_type_1.PushValueType.String: | ||
byteStream.writeUint8(0); | ||
byteStream.writeCString(value.value); | ||
byteStream.writeNulUtf8(value.value); | ||
break; | ||
case value_type_1.ValueType.Sint32: | ||
case push_value_type_1.PushValueType.Sint32: | ||
byteStream.writeUint8(7); | ||
byteStream.writeSint32LE(value.value); | ||
break; | ||
case value_type_1.ValueType.Float32: | ||
case push_value_type_1.PushValueType.Float32: | ||
byteStream.writeUint8(1); | ||
byteStream.writeFloat32LE(value.value); | ||
break; | ||
case value_type_1.ValueType.Float64: | ||
case push_value_type_1.PushValueType.Float64: | ||
byteStream.writeUint8(6); | ||
byteStream.writeFloat64LE(value.value); | ||
break; | ||
case value_type_1.ValueType.Null: | ||
case push_value_type_1.PushValueType.Null: | ||
byteStream.writeUint8(2); | ||
break; | ||
case value_type_1.ValueType.Register: | ||
case push_value_type_1.PushValueType.Register: | ||
byteStream.writeUint8(4); | ||
byteStream.writeUint8(value.value); | ||
break; | ||
case value_type_1.ValueType.Undefined: | ||
case push_value_type_1.PushValueType.Undefined: | ||
byteStream.writeUint8(3); | ||
@@ -328,6 +328,6 @@ break; | ||
function emitDefineFunctionAction(byteStream, value) { | ||
byteStream.writeCString(value.name); | ||
byteStream.writeNulUtf8(value.name); | ||
byteStream.writeUint16LE(value.parameters.length); | ||
for (const parameter of value.parameters) { | ||
byteStream.writeCString(parameter); | ||
byteStream.writeNulUtf8(parameter); | ||
} | ||
@@ -354,2 +354,2 @@ byteStream.writeUint16LE(value.bodySize); | ||
//# sourceMappingURL=data:application/json;charset=utf8;base64,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LElBQUksS0FBSyxDQUFDLFVBQVUsRUFBRTtRQUN4QyxVQUFVLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0tBQ3BDO0lBRUQsVUFBVSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDM0MsQ0FBQztBQVJELDREQVFDO0FBRUQsU0FBZ0IsWUFBWSxDQUFDLFVBQXNCLEVBQUUsS0FBaUI7SUFDcEUsVUFBVSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDekMsQ0FBQztBQUZELG9DQUVDO0FBRUQsU0FBZ0Isb0JBQW9CLENBQUMsVUFBc0IsRUFBRSxLQUF5QjtJQUNwRixNQUFNLFlBQVksR0FBWSxLQUFLLENBQUMsU0FBUyxLQUFLLENBQUMsQ0FBQztJQUNwRCxNQUFNLEtBQUssR0FBVSxDQUFDO1VBQ2xCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1VBQ3pCLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoQyxVQUFVLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdCLGNBQWM7SUFDZCxJQUFJLFlBQVksRUFBRTtRQUNoQixVQUFVLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztLQUMzQztBQUNILENBQUM7QUFWRCxvREFVQyIsImZpbGUiOiJlbWl0dGVycy9hdm0xLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgV3JpdGFibGVCeXRlU3RyZWFtIGFzIEJ5dGVTdHJlYW0sIFdyaXRhYmxlU3RyZWFtIGFzIFN0cmVhbSB9IGZyb20gXCJAb3Blbi1mbGFzaC9zdHJlYW1cIjtcbmltcG9ydCB7IEFjdGlvbiB9IGZyb20gXCJhdm0xLXR5cGVzL2FjdGlvblwiO1xuaW1wb3J0IHsgQWN0aW9uVHlwZSB9IGZyb20gXCJhdm0xLXR5cGVzL2FjdGlvbi10eXBlXCI7XG5pbXBvcnQgKiBhcyBhY3Rpb25zIGZyb20gXCJhdm0xLXR5cGVzL2FjdGlvbnMvaW5kZXhcIjtcbmltcG9ydCB7IENhdGNoVGFyZ2V0IH0gZnJvbSBcImF2bTEtdHlwZXMvY2F0Y2gtdGFyZ2V0XCI7XG5pbXBvcnQgeyBDYXRjaFRhcmdldFR5cGUgfSBmcm9tIFwiYXZtMS10eXBlcy9jYXRjaC10YXJnZXRzL190eXBlXCI7XG5pbXBvcnQgeyBHZXRVcmwyTWV0aG9kIH0gZnJvbSBcImF2bTEtdHlwZXMvZ2V0LXVybDItbWV0aG9kXCI7XG5pbXBvcnQgeyBWYWx1ZSB9IGZyb20gXCJhdm0xLXR5cGVzL3ZhbHVlXCI7XG5pbXBvcnQgeyBWYWx1ZVR5cGUgfSBmcm9tIFwiYXZtMS10eXBlcy92YWx1ZS10eXBlXCI7XG5pbXBvcnQgeyBJbmNpZGVudCB9IGZyb20gXCJpbmNpZGVudFwiO1xuaW1wb3J0IHsgVWludDE2LCBVaW50MiwgVWludDgsIFVpbnRTaXplIH0gZnJvbSBcInNlbWFudGljLXR5cGVzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWN0aW9uSGVhZGVyIHtcbiAgYWN0aW9uQ29kZTogVWludDg7XG4gIGxlbmd0aDogVWludDE2O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW1pdEFjdGlvbkhlYWRlcihieXRlU3RyZWFtOiBCeXRlU3RyZWFtLCB2YWx1ZTogQWN0aW9uSGVhZGVyKTogdm9pZCB7XG4gIGJ5dGVTdHJlYW0ud3JpdGVVaW50OCh2YWx1ZS5hY3Rpb25Db2RlKTtcbiAgaWYgKHZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICBieXRlU3RyZWFtLndyaXRlVWludDE2TEUodmFsdWUubGVuZ3RoKTtcbiAgfVxufVxuXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6Y3ljbG9tYXRpYy1jb21wbGV4aXR5XG5leHBvcnQgZnVuY3Rpb24gZW1pdEFjdGlvbihieXRlU3RyZWFtOiBCeXRlU3RyZWFtLCB2YWx1ZTogQWN0aW9uKTogdm9pZCB7XG4gIHR5cGUgQWN0aW9uRW1pdHRlciA9IG51bWJlciB8IFsoYnl0ZVN0cmVhbTogQnl0ZVN0cmVhbSwgdmFsdWU6IEFjdGlvbikgPT4gdm9pZCB8IFVpbnRTaXplLCBudW1iZXJdO1xuXG4gIGNvbnN0IEFDVElPTl9UWVBFX1RPX0VNSVRURVI6IE1hcDxBY3Rpb25UeXBlLCBBY3Rpb25FbWl0dGVyPiA9IG5ldyBNYXA8QWN0aW9uVHlwZSwgQWN0aW9uRW1pdHRlcj4oPGFueVtdPiBbXG4gICAgW0FjdGlvblR5cGUuQWRkLCAweDBhXSxcbiAgICBbQWN0aW9uVHlwZS5BZGQyLCAweDQ3XSxcbiAgICBbQWN0aW9uVHlwZS5BbmQsIDB4MTBdLFxuICAgIFtBY3Rpb25UeXBlLkFzY2lpVG9DaGFyLCAweDMzXSxcbiAgICBbQWN0aW9uVHlwZS5CaXRBbmQsIDB4NjBdLFxuICAgIFtBY3Rpb25UeXBlLkJpdExTaGlmdCwgMHg2M10sXG4gICAgW0FjdGlvblR5cGUuQml0T3IsIDB4NjFdLFxuICAgIFtBY3Rpb25UeXBlLkJpdFJTaGlmdCwgMHg2NF0sXG4gICAgW0FjdGlvblR5cGUuQml0VVJTaGlmdCwgMHg2NV0sXG4gICAgW0FjdGlvblR5cGUuQml0WG9yLCAweDYyXSxcbiAgICBbQWN0aW9uVHlwZS5DYWxsLCAweDllXSxcbiAgICBbQWN0aW9uVHlwZS5DYWxsRnVuY3Rpb24sIDB4M2RdLFxuICAgIFtBY3Rpb25UeXBlLkNhbGxNZXRob2QsIDB4NTJdLFxuICAgIFtBY3Rpb25UeXBlLkNhc3RPcCwgMHgyYl0sXG4gICAgW0FjdGlvblR5cGUuQ2hhclRvQXNjaWksIDB4MzJdLFxuICAgIFtBY3Rpb25UeXBlLkNsb25lU3ByaXRlLCAweDI0XSxcbiAgICBbQWN0aW9uVHlwZS5Db25zdGFudFBvb2wsIFtlbWl0Q29uc3RhbnRQb29sQWN0aW9uLCAweDg4XV0sXG4gICAgW0FjdGlvblR5cGUuRGVjcmVtZW50LCAweDUxXSxcbiAgICBbQWN0aW9uVHlwZS5EZWZpbmVGdW5jdGlvbiwgW2VtaXREZWZpbmVGdW5jdGlvbkFjdGlvbiwgMHg5Yl1dLFxuICAgIFtBY3Rpb25UeXBlLkRlZmluZUZ1bmN0aW9uMiwgW2VtaXREZWZpbmVGdW5jdGlvbjJBY3Rpb24sIDB4OGVdXSxcbiAgICBbQWN0aW9uVHlwZS5EZWZpbmVMb2NhbCwgMHgzY10sXG4gICAgW0FjdGlvblR5cGUuRGVmaW5lTG9jYWwyLCAweDQxXSxcbiAgICBbQWN0aW9uVHlwZS5EZWxldGUsIDB4M2FdLFxuICAgIFtBY3Rpb25UeXBlLkRlbGV0ZTIsIDB4M2JdLFxuICAgIFtBY3Rpb25UeXBlLkRpdmlkZSwgMHgwZF0sXG4gICAgW0FjdGlvblR5cGUuRW5kRHJhZywgMHgyOF0sXG4gICAgW0FjdGlvblR5cGUuRW51bWVyYXRlLCAweDQ2XSxcbiAgICBbQWN0aW9uVHlwZS5FbnVtZXJhdGUyLCAweDU1XSxcbiAgICBbQWN0aW9uVHlwZS5FcXVhbHMsIDB4MGVdLFxuICAgIFtBY3Rpb25UeXBlLkVxdWFsczIsIDB4NDldLFxuICAgIFtBY3Rpb25UeXBlLkV4dGVuZHMsIDB4NjldLFxuICAgIFtBY3Rpb25UeXBlLkZzQ29tbWFuZDIsIDB4MmRdLFxuICAgIFtBY3Rpb25UeXBlLkdldE1lbWJlciwgMHg0ZV0sXG4gICAgW0FjdGlvblR5cGUuR2V0UHJvcGVydHksIDB4MjJdLFxuICAgIFtBY3Rpb25UeXBlLkdldFRpbWUsIDB4MzRdLFxuICAgIFtBY3Rpb25UeXBlLkdldFVybCwgW2VtaXRHZXRVcmxBY3Rpb24sIDB4ODNdXSxcbiAgICBbQWN0aW9uVHlwZS5HZXRVcmwyLCBbZW1pdEdldFVybDJBY3Rpb24sIDB4OWFdXSxcbiAgICBbQWN0aW9uVHlwZS5HZXRWYXJpYWJsZSwgMHgxY10sXG4gICAgW0FjdGlvblR5cGUuR290b0ZyYW1lLCBbZW1pdEdvdG9GcmFtZUFjdGlvbiwgMHg4MV1dLFxuICAgIFtBY3Rpb25UeXBlLkdvdG9GcmFtZTIsIFtlbWl0R290b0ZyYW1lMkFjdGlvbiwgMHg5Zl1dLFxuICAgIFtBY3Rpb25UeXBlLkdvdG9MYWJlbCwgW2VtaXRHb3RvTGFiZWxBY3Rpb24sIDB4OGNdXSxcbiAgICBbQWN0aW9uVHlwZS5HcmVhdGVyLCAweDY3XSxcbiAgICBbQWN0aW9uVHlwZS5JZiwgW2VtaXRJZkFjdGlvbiwgMHg5ZF1dLFxuICAgIFtBY3Rpb25UeXBlLkltcGxlbWVudHNPcCwgMHgyY10sXG4gICAgW0FjdGlvblR5cGUuSW5jcmVtZW50LCAweDUwXSxcbiAgICBbQWN0aW9uVHlwZS5Jbml0QXJyYXksIDB4NDJdLFxuICAgIFtBY3Rpb25UeXBlLkluaXRPYmplY3QsIDB4NDNdLFxuICAgIFtBY3Rpb25UeXBlLkluc3RhbmNlT2YsIDB4NTRdLFxuICAgIFtBY3Rpb25UeXBlLkp1bXAsIFtlbWl0SnVtcEFjdGlvbiwgMHg5OV1dLFxuICAgIFtBY3Rpb25UeXBlLkxlc3MsIDB4MGZdLFxuICAgIFtBY3Rpb25UeXBlLkxlc3MyLCAweDQ4XSxcbiAgICBbQWN0aW9uVHlwZS5NYkFzY2lpVG9DaGFyLCAweDM3XSxcbiAgICBbQWN0aW9uVHlwZS5NYkNoYXJUb0FzY2lpLCAweDM2XSxcbiAgICBbQWN0aW9uVHlwZS5NYlN0cmluZ0V4dHJhY3QsIDB4MzVdLFxuICAgIFtBY3Rpb25UeXBlLk1iU3RyaW5nTGVuZ3RoLCAweDMxXSxcbiAgICBbQWN0aW9uVHlwZS5Nb2R1bG8sIDB4M2ZdLFxuICAgIFtBY3Rpb25UeXBlLk11bHRpcGx5LCAweDBjXSxcbiAgICBbQWN0aW9uVHlwZS5OZXdNZXRob2QsIDB4NTNdLFxuICAgIFtBY3Rpb25UeXBlLk5ld09iamVjdCwgMHg0MF0sXG4gICAgW0FjdGlvblR5cGUuTmV4dEZyYW1lLCAweDA0XSxcbiAgICBbQWN0aW9uVHlwZS5Ob3QsIDB4MTJdLFxuICAgIFtBY3Rpb25UeXBlLk9yLCAweDExXSxcbiAgICBbQWN0aW9uVHlwZS5QbGF5LCAweDA2XSxcbiAgICBbQWN0aW9uVHlwZS5Qb3AsIDB4MTddLFxuICAgIFtBY3Rpb25UeXBlLlByZXZpb3VzRnJhbWUsIDB4MDVdLFxuICAgIFtBY3Rpb25UeXBlLlB1c2gsIFtlbWl0UHVzaEFjdGlvbiwgMHg5Nl1dLFxuICAgIFtBY3Rpb25UeXBlLlB1c2hEdXBsaWNhdGUsIDB4NGNdLFxuICAgIFtBY3Rpb25UeXBlLlJhbmRvbU51bWJlciwgMHgzMF0sXG4gICAgW0FjdGlvblR5cGUuUmV0dXJuLCAweDNlXSxcbiAgICBbQWN0aW9uVHlwZS5SZW1vdmVTcHJpdGUsIDB4MjVdLFxuICAgIFtBY3Rpb25UeXBlLlNldE1lbWJlciwgMHg0Zl0sXG4gICAgW0FjdGlvblR5cGUuU2V0UHJvcGVydHksIDB4MjNdLFxuICAgIFtBY3Rpb25UeXBlLlNldFRhcmdldCwgW2VtaXRTZXRUYXJnZXRBY3Rpb24sIDB4OGJdXSxcbiAgICBbQWN0aW9uVHlwZS5TZXRUYXJnZXQyLCAweDIwXSxcbiAgICBbQWN0aW9uVHlwZS5TZXRWYXJpYWJsZSwgMHgxZF0sXG4gICAgW0FjdGlvblR5cGUuU3RhY2tTd2FwLCAweDRkXSxcbiAgICBbQWN0aW9uVHlwZS5TdGFydERyYWcsIDB4MjddLFxuICAgIFtBY3Rpb25UeXBlLlN0b3AsIDB4MDddLFxuICAgIFtBY3Rpb25UeXBlLlN0b3BTb3VuZHMsIDB4MDldLFxuICAgIFtBY3Rpb25UeXBlLlN0b3JlUmVnaXN0ZXIsIFtlbWl0U3RvcmVSZWdpc3RlckFjdGlvbiwgMHg4N11dLFxuICAgIFtBY3Rpb25UeXBlLlN0cmljdEVxdWFscywgMHg2Nl0sXG4gICAgW0FjdGlvblR5cGUuU3RyaW5nQWRkLCAweDIxXSxcbiAgICBbQWN0aW9uVHlwZS5TdHJpbmdFcXVhbHMsIDB4MTNdLFxuICAgIFtBY3Rpb25UeXBlLlN0cmluZ0V4dHJhY3QsIDB4MTVdLFxuICAgIFtBY3Rpb25UeXBlLlN0cmluZ0dyZWF0ZXIsIDB4NjhdLFxuICAgIFtBY3Rpb25UeXBlLlN0cmluZ0xlbmd0aCwgMHgxNF0sXG4gICAgW0FjdGlvblR5cGUuU3RyaW5nTGVzcywgMHgyOV0sXG4gICAgW0FjdGlvblR5cGUuU3VidHJhY3QsIDB4MGJdLFxuICAgIFtBY3Rpb25UeXBlLlRhcmdldFBhdGgsIDB4NDVdLFxuICAgIFtBY3Rpb25UeXBlLlRocm93LCAweDJhXSxcbiAgICBbQWN0aW9uVHlwZS5Ub0ludGVnZXIsIDB4MThdLFxuICAgIFtBY3Rpb25UeXBlLlRvTnVtYmVyLCAweDRhXSxcbiAgICBbQWN0aW9uVHlwZS5Ub1N0cmluZywgMHg0Yl0sXG4gICAgW0FjdGlvblR5cGUuVG9nZ2xlUXVhbGl0eSwgMHgwOF0sXG4gICAgW0FjdGlvblR5cGUuVHJhY2UsIDB4MjZdLFxuICAgIFtBY3Rpb25UeXBlLlRyeSwgW2VtaXRUcnlBY3Rpb24sIDB4OGZdXSxcbiAgICBbQWN0aW9uVHlwZS5UeXBlT2YsIDB4NDRdLFxuICAgIFtBY3Rpb25UeXBlLldhaXRGb3JGcmFtZSwgW2VtaXRXYWl0Rm9yRnJhbWVBY3Rpb24sIDB4OGFdXSxcbiAgICBbQWN0aW9uVHlwZS5XYWl0Rm9yRnJhbWUyLCBbZW1pdFdhaXRGb3JGcmFtZTJBY3Rpb24sIDB4OGRdXSxcbiAgICBbQWN0aW9uVHlwZS5XaXRoLCBbZW1pdFdpdGhBY3Rpb24sIDB4OTRdXSxcbiAgXSk7XG5cbiAgY29uc3QgYWN0aW9uRW1pdHRlcjogQWN0aW9uRW1pdHRlciB8IHVuZGVmaW5lZCA9IEFDVElPTl9UWVBFX1RPX0VNSVRURVIuZ2V0KHZhbHVlLmFjdGlvbik7XG5cbiAgaWYgKGFjdGlvbkVtaXR0ZXIgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBJbmNpZGVudChcIlVuZXhwZWN0ZWRBY3Rpb25cIiwge3R5cGU6IHZhbHVlLmFjdGlvbiwgdHlwZU5hbWU6IEFjdGlvblR5cGVbdmFsdWUuYWN0aW9uXX0pO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBhY3Rpb25FbWl0dGVyID09PSBcIm51bWJlclwiKSB7XG4gICAgZW1pdEFjdGlvbkhlYWRlcihieXRlU3RyZWFtLCB7YWN0aW9uQ29kZTogYWN0aW9uRW1pdHRlciwgbGVuZ3RoOiAwfSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgYWN0aW9uU3RyZWFtOiBTdHJlYW0gPSBuZXcgU3RyZWFtKCk7XG4gIGFjdGlvbkVtaXR0ZXJbMF0oYWN0aW9uU3RyZWFtLCB2YWx1ZSk7XG4gIGVtaXRBY3Rpb25IZWFkZXIoXG4gICAgYnl0ZVN0cmVhbSxcbiAgICB7XG4gICAgICBhY3Rpb25Db2RlOiBhY3Rpb25FbWl0dGVyWzFdLFxuICAgICAgbGVuZ3RoOiBhY3Rpb25TdHJlYW0uYnl0ZVBvcyxcbiAgICB9LFxuICApO1xuICBieXRlU3RyZWFtLndyaXRlKGFjdGlvblN0cmVhbSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbWl0R290b0ZyYW1lQWN0aW9uKGJ5dGVTdHJlYW06IEJ5dGVTdHJlYW0sIHZhbHVlOiBhY3Rpb25zLkdvdG9GcmFtZSk6IHZvaWQge1xuICBieXRlU3RyZWFtLndyaXRlVWludDE2TEUodmFsdWUuZnJhbWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW1pdEdldFVybEFjdGlvbihieXRlU3RyZWFtOiBCeXRlU3RyZWFtLCB2YWx1ZTogYWN0aW9ucy5HZXRVcmwpOiB2b2lkIHtcbiAgYnl0ZVN0cmVhbS53cml0ZUNTdHJpbmcodmFsdWUudXJsKTtcbiAgYnl0ZVN0cmVhbS53cml0ZUNTdHJpbmcodmFsdWUudGFyZ2V0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVtaXRTdG9yZVJlZ2lzdGVyQWN0aW9uKGJ5dGVTdHJlYW06IEJ5dGVTdHJlYW0sIHZhbHVlOiBhY3Rpb25zLlN0b3JlUmVnaXN0ZXIpOiB2b2lkIHtcbiAgYnl0ZVN0cmVhbS53cml0ZVVpbnQ4KHZhbHVlLnJlZ2lzdGVyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVtaXRDb25zdGFudFBvb2xBY3Rpb24oYnl0ZVN0cmVhbTogQnl0ZVN0cmVhbSwgdmFsdWU6IGFjdGlvbnMuQ29uc3RhbnRQb29sKTogdm9pZCB7XG4gIGJ5dGVTdHJlYW0ud3JpdGVVaW50MTZMRSh2YWx1ZS5jb25zdGFudFBvb2wubGVuZ3RoKTtcbiAgZm9yIChjb25zdCBjb25zdGFudCBvZiB2YWx1ZS5jb25zdGFudFBvb2wpIHtcbiAgICBieXRlU3RyZWFtLndyaXRlQ1N0cmluZyhjb25zdGFudCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVtaXRXYWl0Rm9yRnJhbWVBY3Rpb24oYnl0ZVN0cmVhbTogQnl0ZVN0cmVhbSwgdmFsdWU6IGFjdGlvbnMuV2FpdEZvckZyYW1lKTogdm9pZCB7XG4gIGJ5dGVTdHJlYW0ud3JpdGVVaW50MTZMRSh2YWx1ZS5mcmFtZSk7XG4gIGJ5dGVTdHJlYW0ud3JpdGVVaW50OCh2YWx1ZS5za2lwQ291bnQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW1pdFNldFRhcmdldEFjdGlvbihieXRlU3RyZWFtOiBCeXRlU3RyZWFtLCB2YWx1ZTogYWN0aW9ucy5TZXRUYXJnZXQpOiB2b2lkIHtcbiAgYnl0ZVN0cmVhbS53cml0ZUNTdHJpbmcodmFsdWUudGFyZ2V0TmFtZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbWl0R290b0xhYmVsQWN0aW9uKGJ5dGVTdHJlYW06IEJ5dGVTdHJlYW0sIHZhbHVlOiBhY3Rpb25zLkdvdG9MYWJlbCk6IHZvaWQge1xuICBieXRlU3RyZWFtLndyaXRlQ1N0cmluZyh2YWx1ZS5sYWJlbCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbWl0V2FpdEZvckZyYW1lMkFjdGlvbihieXRlU3RyZWFtOiBCeXRlU3RyZWFtLCB2YWx1ZTogYWN0aW9ucy5XYWl0Rm9yRnJhbWUyKTogdm9pZCB7XG4gIGJ5dGVTdHJlYW0ud3JpdGVVaW50OCh2YWx1ZS5za2lwQ291bnQpO1xufVxuXG4vKipcbiAqIEVtaXRzIGEgRGVmaW5lRnVuY3Rpb24yIGFjdGlvbi5cbiAqXG4gKiBAcGFyYW0gYnl0ZVN0cmVhbSBUaGUgYnl0ZXN0cmVhbSB1c2VkIHRvIGVtaXQgdGhlIGFjdGlvbi5cbiAqIEBwYXJhbSB2YWx1ZSBEZWZpbmVGdW5jdGlvbjIgYWN0aW9uIHRvIGVtaXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbWl0RGVmaW5lRnVuY3Rpb24yQWN0aW9uKGJ5dGVTdHJlYW06IEJ5dGVTdHJlYW0sIHZhbHVlOiBhY3Rpb25zLkRlZmluZUZ1bmN0aW9uMik6IHZvaWQge1xuICBieXRlU3RyZWFtLndyaXRlQ1N0cmluZyh2YWx1ZS5uYW1lKTtcbiAgYnl0ZVN0cmVhbS53cml0ZVVpbnQxNkxFKHZhbHVlLnBhcmFtZXRlcnMubGVuZ3RoKTtcbiAgYnl0ZVN0cmVhbS53cml0ZVVpbnQ4KHZhbHVlLnJlZ2lzdGVyQ291bnQpO1xuXG4gIGNvbnN0IGZsYWdzOiBVaW50MTYgPSAwXG4gICAgfCAodmFsdWUucHJlbG9hZFRoaXMgPyAxIDw8IDAgOiAwKVxuICAgIHwgKHZhbHVlLnN1cHByZXNzVGhpcyA/IDEgPDwgMSA6IDApXG4gICAgfCAodmFsdWUucHJlbG9hZEFyZ3VtZW50cyA/IDEgPDwgMiA6IDApXG4gICAgfCAodmFsdWUuc3VwcHJlc3NBcmd1bWVudHMgPyAxIDw8IDMgOiAwKVxuICAgIHwgKHZhbHVlLnByZWxvYWRTdXBlciA/IDEgPDwgNCA6IDApXG4gICAgfCAodmFsdWUuc3VwcHJlc3NTdXBlciA/IDEgPDwgNSA6IDApXG4gICAgfCAodmFsdWUucHJlbG9hZFJvb3QgPyAxIDw8IDYgOiAwKVxuICAgIHwgKHZhbHVlLnByZWxvYWRQYXJlbnQgPyAxIDw8IDcgOiAwKVxuICAgIHwgKHZhbHVlLnByZWxvYWRHbG9iYWwgPyAxIDw8IDggOiAwKTtcbiAgYnl0ZVN0cmVhbS53cml0ZVVpbnQxNkxFKGZsYWdzKTtcblxuICBmb3IgKGNvbnN0IHBhcmFtZXRlciBvZiB2YWx1ZS5wYXJhbWV0ZXJzKSB7XG4gICAgYnl0ZVN0cmVhbS53cml0ZVVpbnQ4KHBhcmFtZXRlci5yZWdpc3Rlcik7XG4gICAgYnl0ZVN0cmVhbS53cml0ZUNTdHJpbmcocGFyYW1ldGVyLm5hbWUpO1xuICB9XG5cbiAgYnl0ZVN0cmVhbS53cml0ZVVpbnQxNkxFKHZhbHVlLmJvZHlTaXplKTtcbn1cblxuZnVuY3Rpb24gZW1pdENhdGNoVGFyZ2V0KGJ5dGVTdHJlYW06IEJ5dGVTdHJlYW0sIHZhbHVlOiBDYXRjaFRhcmdldCk6IHZvaWQge1xuICBpZiAodmFsdWUudHlwZSA9PT0gQ2F0Y2hUYXJnZXRUeXBlLlJlZ2lzdGVyKSB7XG4gICAgYnl0ZVN0cmVhbS53cml0ZVVpbnQ4KHZhbHVlLnRhcmdldCk7XG4gIH0gZWxzZSB7XG4gICAgYnl0ZVN0cmVhbS53cml0ZUNTdHJpbmcodmFsdWUudGFyZ2V0KTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZW1pdFRyeUFjdGlvbihieXRlU3RyZWFtOiBCeXRlU3RyZWFtLCB2YWx1ZTogYWN0aW9ucy5UcnkpOiB2b2lkIHtcbiAgY29uc3QgY2F0Y2hJblJlZ2lzdGVyOiBib29sZWFuID0gdmFsdWUuY2F0Y2hUYXJnZXQgIT09IHVuZGVmaW5lZFxuICAgICYmIHZhbHVlLmNhdGNoVGFyZ2V0LnR5cGUgPT09IENhdGNoVGFyZ2V0VHlwZS5SZWdpc3RlcjtcblxuICBjb25zdCBmbGFnczogVWludDggPSAwXG4gICAgfCAodmFsdWUuY2F0Y2hTaXplICE9PSB1bmRlZmluZWQgPyAxIDw8IDAgOiAwKVxuICAgIHwgKHZhbHVlLmZpbmFsbHlTaXplICE9PSB1bmRlZmluZWQgPyAxIDw8IDEgOiAwKVxuICAgIHwgKGNhdGNoSW5SZWdpc3RlciA/IDEgPDwgMiA6IDApO1xuICAvLyAoU2tpcCA1IGJpdHMpXG4gIGJ5dGVTdHJlYW0ud3JpdGVVaW50OChmbGFncyk7XG5cbiAgYnl0ZVN0cmVhbS53cml0ZVVpbnQxNkxFKHZhbHVlLnRyeVNpemUpO1xuICBieXRlU3RyZWFtLndyaXRlVWludDE2TEUodmFsdWUuY2F0Y2hTaXplICE9PSB1bmRlZmluZWQgPyB2YWx1ZS5jYXRjaFNpemUgOiAwKTtcbiAgYnl0ZVN0cmVhbS53cml0ZVVpbnQxNkxFKHZhbHVlLmZpbmFsbHlTaXplICE9PSB1bmRlZmluZWQgPyB2YWx1ZS5maW5hbGx5U2l6ZSA6IDApO1xuICBlbWl0Q2F0Y2hUYXJnZXQoYnl0ZVN0cmVhbSwgdmFsdWUuY2F0Y2hUYXJnZXQpO1xufVxuXG4vKipcbiAqIEVtaXRzIGEgV2l0aCBhY3Rpb24uXG4gKlxuICogQHBhcmFtIGJ5dGVTdHJlYW0gVGhlIGJ5dGVzdHJlYW0gdXNlZCB0byBlbWl0IHRoZSBhY3Rpb24uXG4gKiBAcGFyYW0gdmFsdWUgV2l0aCBhY3Rpb24gdG8gZW1pdC5cbiAqIEByZXR1cm5zIFRoZSBsZW5ndGggZm9yIHRoZSBhY3Rpb24gaGVhZGVyIChleGNsdWRpbmcgdGhlIHdpdGggYm9keSkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbWl0V2l0aEFjdGlvbihieXRlU3RyZWFtOiBCeXRlU3RyZWFtLCB2YWx1ZTogYWN0aW9ucy5XaXRoKTogdm9pZCB7XG4gIGJ5dGVTdHJlYW0ud3JpdGVVaW50MTZMRSh2YWx1ZS53aXRoU2l6ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbWl0UHVzaEFjdGlvbihieXRlU3RyZWFtOiBCeXRlU3RyZWFtLCB2YWx1ZTogYWN0aW9ucy5QdXNoKTogdm9pZCB7XG4gIGZvciAoY29uc3QgcHVzaGVkIG9mIHZhbHVlLnZhbHVlcykge1xuICAgIGVtaXRBY3Rpb25WYWx1ZShieXRlU3RyZWFtLCBwdXNoZWQpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbWl0QWN0aW9uVmFsdWUoYnl0ZVN0cmVhbTogQnl0ZVN0cmVhbSwgdmFsdWU6IFZhbHVlKTogdm9pZCB7XG4gIHN3aXRjaCAodmFsdWUudHlwZSkge1xuICAgIGNhc2UgVmFsdWVUeXBlLkJvb2xlYW46XG4gICAgICBieXRlU3RyZWFtLndyaXRlVWludDgoNSk7XG4gICAgICBieXRlU3RyZWFtLndyaXRlVWludDgodmFsdWUudmFsdWUgPyAxIDogMCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFZhbHVlVHlwZS5Db25zdGFudDpcbiAgICAgIGlmICh2YWx1ZS52YWx1ZSA+IDB4ZmYpIHtcbiAgICAgICAgYnl0ZVN0cmVhbS53cml0ZVVpbnQ4KDkpO1xuICAgICAgICBieXRlU3RyZWFtLndyaXRlVWludDE2TEUodmFsdWUudmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnl0ZVN0cmVhbS53cml0ZVVpbnQ4KDgpO1xuICAgICAgICBieXRlU3RyZWFtLndyaXRlVWludDgodmFsdWUudmFsdWUgYXMgVWludDgpO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSBWYWx1ZVR5cGUuU3RyaW5nOlxuICAgICAgYnl0ZVN0cmVhbS53cml0ZVVpbnQ4KDApO1xuICAgICAgYnl0ZVN0cmVhbS53cml0ZUNTdHJpbmcodmFsdWUudmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBWYWx1ZVR5cGUuU2ludDMyOlxuICAgICAgYnl0ZVN0cmVhbS53cml0ZVVpbnQ4KDcpO1xuICAgICAgYnl0ZVN0cmVhbS53cml0ZVNpbnQzMkxFKHZhbHVlLnZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgVmFsdWVUeXBlLkZsb2F0MzI6XG4gICAgICBieXRlU3RyZWFtLndyaXRlVWludDgoMSk7XG4gICAgICBieXRlU3RyZWFtLndyaXRlRmxvYXQzMkxFKHZhbHVlLnZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgVmFsdWVUeXBlLkZsb2F0NjQ6XG4gICAgICBieXRlU3RyZWFtLndyaXRlVWludDgoNik7XG4gICAgICBieXRlU3RyZWFtLndyaXRlRmxvYXQ2NExFKHZhbHVlLnZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgVmFsdWVUeXBlLk51bGw6XG4gICAgICBieXRlU3RyZWFtLndyaXRlVWludDgoMik7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFZhbHVlVHlwZS5SZWdpc3RlcjpcbiAgICAgIGJ5dGVTdHJlYW0ud3JpdGVVaW50OCg0KTtcbiAgICAgIGJ5dGVTdHJlYW0ud3JpdGVVaW50OCh2YWx1ZS52YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFZhbHVlVHlwZS5VbmRlZmluZWQ6XG4gICAgICBieXRlU3RyZWFtLndyaXRlVWludDgoMyk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEluY2lkZW50KFwiVW5leHBlY3RlZFZhbHVlVHlwZVwiKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZW1pdEp1bXBBY3Rpb24oYnl0ZVN0cmVhbTogQnl0ZVN0cmVhbSwgdmFsdWU6IGFjdGlvbnMuSnVtcCk6IHZvaWQge1xuICBieXRlU3RyZWFtLndyaXRlVWludDE2TEUodmFsdWUub2Zmc2V0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVtaXRHZXRVcmwyQWN0aW9uKGJ5dGVTdHJlYW06IEJ5dGVTdHJlYW0sIHZhbHVlOiBhY3Rpb25zLkdldFVybDIpOiB2b2lkIHtcbiAgY29uc3QgTUVUSE9EX1RPX0NPREU6IE1hcDxHZXRVcmwyTWV0aG9kLCBVaW50Mj4gPSBuZXcgTWFwKFtcbiAgICBbR2V0VXJsMk1ldGhvZC5Ob25lLCAwIGFzIFVpbnQyXSxcbiAgICBbR2V0VXJsMk1ldGhvZC5HZXQsIDEgYXMgVWludDJdLFxuICAgIFtHZXRVcmwyTWV0aG9kLlBvc3QsIDIgYXMgVWludDJdLFxuICBdKTtcbiAgY29uc3QgbWV0aG9kQ29kZTogVWludDIgfCB1bmRlZmluZWQgPSBNRVRIT0RfVE9fQ09ERS5nZXQodmFsdWUubWV0aG9kKTtcbiAgaWYgKG1ldGhvZENvZGUgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBJbmNpZGVudChcIlVuZXhwZWN0ZWRHZXRVcmwyTWV0aG9kXCIpO1xuICB9XG5cbiAgY29uc3QgZmxhZ3M6IFVpbnQ4ID0gMFxuICAgIHwgKHZhbHVlLmxvYWRWYXJpYWJsZXMgPyAxIDw8IDAgOiAwKVxuICAgIHwgKHZhbHVlLmxvYWRUYXJnZXQgPyAxIDw8IDEgOiAwKVxuICAgIHwgKG1ldGhvZENvZGUgPDwgNik7XG5cbiAgYnl0ZVN0cmVhbS53cml0ZVVpbnQ4KGZsYWdzKTtcbn1cblxuLyoqXG4gKiBFbWl0cyBhIERlZmluZUZ1bmN0aW9uIGFjdGlvbi5cbiAqXG4gKiBAcGFyYW0gYnl0ZVN0cmVhbSBUaGUgYnl0ZXN0cmVhbSB1c2VkIHRvIGVtaXQgdGhlIGFjdGlvbi5cbiAqIEBwYXJhbSB2YWx1ZSBEZWZpbmVGdW5jdGlvbiBhY3Rpb24gdG8gZW1pdC5cbiAqIEByZXR1cm5zIFRoZSBsZW5ndGggZm9yIHRoZSBhY3Rpb24gaGVhZGVyIChleGNsdWRpbmcgdGhlIGZ1bmN0aW9uIGJvZHkpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW1pdERlZmluZUZ1bmN0aW9uQWN0aW9uKGJ5dGVTdHJlYW06IEJ5dGVTdHJlYW0sIHZhbHVlOiBhY3Rpb25zLkRlZmluZUZ1bmN0aW9uKTogdm9pZCB7XG4gIGJ5dGVTdHJlYW0ud3JpdGVDU3RyaW5nKHZhbHVlLm5hbWUpO1xuICBieXRlU3RyZWFtLndyaXRlVWludDE2TEUodmFsdWUucGFyYW1ldGVycy5sZW5ndGgpO1xuICBmb3IgKGNvbnN0IHBhcmFtZXRlciBvZiB2YWx1ZS5wYXJhbWV0ZXJzKSB7XG4gICAgYnl0ZVN0cmVhbS53cml0ZUNTdHJpbmcocGFyYW1ldGVyKTtcbiAgfVxuXG4gIGJ5dGVTdHJlYW0ud3JpdGVVaW50MTZMRSh2YWx1ZS5ib2R5U2l6ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbWl0SWZBY3Rpb24oYnl0ZVN0cmVhbTogQnl0ZVN0cmVhbSwgdmFsdWU6IGFjdGlvbnMuSWYpOiB2b2lkIHtcbiAgYnl0ZVN0cmVhbS53cml0ZVVpbnQxNkxFKHZhbHVlLm9mZnNldCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbWl0R290b0ZyYW1lMkFjdGlvbihieXRlU3RyZWFtOiBCeXRlU3RyZWFtLCB2YWx1ZTogYWN0aW9ucy5Hb3RvRnJhbWUyKTogdm9pZCB7XG4gIGNvbnN0IGhhc1NjZW5lQmlhczogYm9vbGVhbiA9IHZhbHVlLnNjZW5lQmlhcyAhPT0gMDtcbiAgY29uc3QgZmxhZ3M6IFVpbnQ4ID0gMFxuICAgIHwgKHZhbHVlLnBsYXkgPyAxIDw8IDAgOiAwKVxuICAgIHwgKGhhc1NjZW5lQmlhcyA/IDEgPDwgMSA6IDApO1xuICBieXRlU3RyZWFtLndyaXRlVWludDgoZmxhZ3MpO1xuICAvLyBTa2lwIDYgYml0c1xuICBpZiAoaGFzU2NlbmVCaWFzKSB7XG4gICAgYnl0ZVN0cmVhbS53cml0ZVVpbnQxNkxFKHZhbHVlLnNjZW5lQmlhcyk7XG4gIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiLi4ifQ== | ||
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIl9zcmMvZW1pdHRlcnMvYXZtMS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLCtDQUFnRztBQUNoRyx3REFBb0Q7QUFFcEQsMERBQWlFO0FBQ2pFLGdFQUEyRDtBQUUzRCxnRUFBMkQ7QUFHM0QsdUNBQW9DO0FBUXBDLFNBQWdCLGdCQUFnQixDQUFDLFVBQXNCLEVBQUUsS0FBbUI7SUFDMUUsVUFBVSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDeEMsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtRQUNwQixVQUFVLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUN4QztBQUNILENBQUM7QUFMRCw0Q0FLQztBQUVELGlEQUFpRDtBQUNqRCxTQUFnQixVQUFVLENBQUMsVUFBc0IsRUFBRSxLQUFnQjtJQUdqRSxNQUFNLHNCQUFzQixHQUFtQyxJQUFJLEdBQUcsQ0FBb0M7UUFDeEcsQ0FBQyx3QkFBVSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUM7UUFDdEIsQ0FBQyx3QkFBVSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUM7UUFDdkIsQ0FBQyx3QkFBVSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUM7UUFDdEIsQ0FBQyx3QkFBVSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUM7UUFDOUIsQ0FBQyx3QkFBVSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUM7UUFDekIsQ0FBQyx3QkFBVSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUM7UUFDNUIsQ0FBQyx3QkFBVSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUM7UUFDeEIsQ0FBQyx3QkFBVSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUM7UUFDNUIsQ0FBQyx3QkFBVSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUM7UUFDN0IsQ0FBQyx3QkFBVSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUM7UUFDekIsQ0FBQyx3QkFBVSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUM7UUFDdkIsQ0FBQyx3QkFBVSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUM7UUFDL0IsQ0FBQyx3QkFBVSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUM7UUFDN0IsQ0FBQyx3QkFBVSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUM7UUFDekIsQ0FBQyx3QkFBVSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUM7UUFDOUIsQ0FBQyx3QkFBVSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUM7UUFDOUIsQ0FBQyx3QkFBVSxDQUFDLFlBQVksRUFBRSxDQUFDLHNCQUFzQixFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3pELENBQUMsd0JBQVUsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDO1FBQzVCLENBQUMsd0JBQVUsQ0FBQyxjQUFjLEVBQUUsQ0FBQyx3QkFBd0IsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM3RCxDQUFDLHdCQUFVLENBQUMsZUFBZSxFQUFFLENBQUMseUJBQXlCLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDL0QsQ0FBQyx3QkFBVSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUM7UUFDOUIsQ0FBQyx3QkFBVSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUM7UUFDL0IsQ0FBQyx3QkFBVSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUM7UUFDekIsQ0FBQyx3QkFBVSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUM7UUFDMUIsQ0FBQyx3QkFBVSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUM7UUFDekIsQ0FBQyx3QkFBVSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUM7UUFDMUIsQ0FBQyx3QkFBVSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUM7UUFDNUIsQ0FBQyx3QkFBVSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUM7UUFDN0IsQ0FBQyx3QkFBVSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUM7UUFDekIsQ0FBQyx3QkFBVSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUM7UUFDMUIsQ0FBQyx3QkFBVSxDQUFD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QixFQUFFLEtBQTZCO0lBQzVGLFVBQVUsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BDLFVBQVUsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNsRCxLQUFLLE1BQU0sU0FBUyxJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUU7UUFDeEMsVUFBVSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztLQUNwQztJQUVELFVBQVUsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzNDLENBQUM7QUFSRCw0REFRQztBQUVELFNBQWdCLFlBQVksQ0FBQyxVQUFzQixFQUFFLEtBQWlCO0lBQ3BFLFVBQVUsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3pDLENBQUM7QUFGRCxvQ0FFQztBQUVELFNBQWdCLG9CQUFvQixDQUFDLFVBQXNCLEVBQUUsS0FBeUI7SUFDcEYsTUFBTSxZQUFZLEdBQVksS0FBSyxDQUFDLFNBQVMsS0FBSyxDQUFDLENBQUM7SUFDcEQsTUFBTSxLQUFLLEdBQVUsQ0FBQztVQUNsQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztVQUN6QixDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3QixjQUFjO0lBQ2QsSUFBSSxZQUFZLEVBQUU7UUFDaEIsVUFBVSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7S0FDM0M7QUFDSCxDQUFDO0FBVkQsb0RBVUMiLCJmaWxlIjoiZW1pdHRlcnMvYXZtMS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFdyaXRhYmxlQnl0ZVN0cmVhbSBhcyBCeXRlU3RyZWFtLCBXcml0YWJsZVN0cmVhbSBhcyBTdHJlYW0gfSBmcm9tIFwiQG9wZW4tZmxhc2gvc3RyZWFtXCI7XG5pbXBvcnQgeyBBY3Rpb25UeXBlIH0gZnJvbSBcImF2bTEtdHlwZXMvYWN0aW9uLXR5cGVcIjtcbmltcG9ydCB7IENhdGNoVGFyZ2V0IH0gZnJvbSBcImF2bTEtdHlwZXMvY2F0Y2gtdGFyZ2V0XCI7XG5pbXBvcnQgeyBDYXRjaFRhcmdldFR5cGUgfSBmcm9tIFwiYXZtMS10eXBlcy9jYXRjaC10YXJnZXRzL190eXBlXCI7XG5pbXBvcnQgeyBHZXRVcmwyTWV0aG9kIH0gZnJvbSBcImF2bTEtdHlwZXMvZ2V0LXVybDItbWV0aG9kXCI7XG5pbXBvcnQgeyBQdXNoVmFsdWUgfSBmcm9tIFwiYXZtMS10eXBlcy9wdXNoLXZhbHVlXCI7XG5pbXBvcnQgeyBQdXNoVmFsdWVUeXBlIH0gZnJvbSBcImF2bTEtdHlwZXMvcHVzaC12YWx1ZS10eXBlXCI7XG5pbXBvcnQgeyBBY3Rpb24gYXMgUmF3QWN0aW9uIH0gZnJvbSBcImF2bTEtdHlwZXMvcmF3L2FjdGlvblwiO1xuaW1wb3J0ICogYXMgYWN0aW9ucyBmcm9tIFwiYXZtMS10eXBlcy9yYXcvYWN0aW9ucy9pbmRleFwiO1xuaW1wb3J0IHsgSW5jaWRlbnQgfSBmcm9tIFwiaW5jaWRlbnRcIjtcbmltcG9ydCB7IFVpbnQxNiwgVWludDIsIFVpbnQ4LCBVaW50U2l6ZSB9IGZyb20gXCJzZW1hbnRpYy10eXBlc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFjdGlvbkhlYWRlciB7XG4gIGFjdGlvbkNvZGU6IFVpbnQ4O1xuICBsZW5ndGg6IFVpbnQxNjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVtaXRBY3Rpb25IZWFkZXIoYnl0ZVN0cmVhbTogQnl0ZVN0cmVhbSwgdmFsdWU6IEFjdGlvbkhlYWRlcik6IHZvaWQge1xuICBieXRlU3RyZWFtLndyaXRlVWludDgodmFsdWUuYWN0aW9uQ29kZSk7XG4gIGlmICh2YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgYnl0ZVN0cmVhbS53cml0ZVVpbnQxNkxFKHZhbHVlLmxlbmd0aCk7XG4gIH1cbn1cblxuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmN5Y2xvbWF0aWMtY29tcGxleGl0eVxuZXhwb3J0IGZ1bmN0aW9uIGVtaXRBY3Rpb24oYnl0ZVN0cmVhbTogQnl0ZVN0cmVhbSwgdmFsdWU6IFJhd0FjdGlvbik6IHZvaWQge1xuICB0eXBlIEFjdGlvbkVtaXR0ZXIgPSBudW1iZXIgfCBbKGJ5dGVTdHJlYW06IEJ5dGVTdHJlYW0sIHZhbHVlOiBSYXdBY3Rpb24pID0+IHZvaWQgfCBVaW50U2l6ZSwgbnVtYmVyXTtcblxuICBjb25zdCBBQ1RJT05fVFlQRV9UT19FTUlUVEVSOiBNYXA8QWN0aW9uVHlwZSwgQWN0aW9uRW1pdHRlcj4gPSBuZXcgTWFwPEFjdGlvblR5cGUsIEFjdGlvbkVtaXR0ZXI+KDxhbnlbXT4gW1xuICAgIFtBY3Rpb25UeXBlLkFkZCwgMHgwYV0sXG4gICAgW0FjdGlvblR5cGUuQWRkMiwgMHg0N10sXG4gICAgW0FjdGlvblR5cGUuQW5kLCAweDEwXSxcbiAgICBbQWN0aW9uVHlwZS5Bc2NpaVRvQ2hhciwgMHgzM10sXG4gICAgW0FjdGlvblR5cGUuQml0QW5kLCAweDYwXSxcbiAgICBbQWN0aW9uVHlwZS5CaXRMU2hpZnQsIDB4NjNdLFxuICAgIFtBY3Rpb25UeXBlLkJpdE9yLCAweDYxXSxcbiAgICBbQWN0aW9uVHlwZS5CaXRSU2hpZnQsIDB4NjRdLFxuICAgIFtBY3Rpb25UeXBlLkJpdFVSU2hpZnQsIDB4NjVdLFxuICAgIFtBY3Rpb25UeXBlLkJpdFhvciwgMHg2Ml0sXG4gICAgW0FjdGlvblR5cGUuQ2FsbCwgMHg5ZV0sXG4gICAgW0FjdGlvblR5cGUuQ2FsbEZ1bmN0aW9uLCAweDNkXSxcbiAgICBbQWN0aW9uVHlwZS5DYWxsTWV0aG9kLCAweDUyXSxcbiAgICBbQWN0aW9uVHlwZS5DYXN0T3AsIDB4MmJdLFxuICAgIFtBY3Rpb25UeXBlLkNoYXJUb0FzY2lpLCAweDMyXSxcbiAgICBbQWN0aW9uVHlwZS5DbG9uZVNwcml0ZSwgMHgyNF0sXG4gICAgW0FjdGlvblR5cGUuQ29uc3RhbnRQb29sLCBbZW1pdENvbnN0YW50UG9vbEFjdGlvbiwgMHg4OF1dLFxuICAgIFtBY3Rpb25UeXBlLkRlY3JlbWVudCwgMHg1MV0sXG4gICAgW0FjdGlvblR5cGUuRGVmaW5lRnVuY3Rpb24sIFtlbWl0RGVmaW5lRnVuY3Rpb25BY3Rpb24sIDB4OWJdXSxcbiAgICBbQWN0aW9uVHlwZS5EZWZpbmVGdW5jdGlvbjIsIFtlbWl0RGVmaW5lRnVuY3Rpb24yQWN0aW9uLCAweDhlXV0sXG4gICAgW0FjdGlvblR5cGUuRGVmaW5lTG9jYWwsIDB4M2NdLFxuICAgIFtBY3Rpb25UeXBlLkRlZmluZUxvY2FsMiwgMHg0MV0sXG4gICAgW0FjdGlvblR5cGUuRGVsZXRlLCAweDNhXSxcbiAgICBbQWN0aW9uVHlwZS5EZWxldGUyLCAweDNiXSxcbiAgICBbQWN0aW9uVHlwZS5EaXZpZGUsIDB4MGRdLFxuICAgIFtBY3Rpb25UeXBlLkVuZERyYWcsIDB4MjhdLFxuICAgIFtBY3Rpb25UeXBlLkVudW1lcmF0ZSwgMHg0Nl0sXG4gICAgW0FjdGlvblR5cGUuRW51bWVyYXRlMiwgMHg1NV0sXG4gICAgW0FjdGlvblR5cGUuRXF1YWxzLCAweDBlXSxcbiAgICBbQWN0aW9uVHlwZS5FcXVhbHMyLCAweDQ5XSxcbiAgICBbQWN0aW9uVHlwZS5FeHRlbmRzLCAweDY5XSxcbiAgICBbQWN0aW9uVHlwZS5Gc0NvbW1hbmQyLCAweDJkXSxcbiAgICBbQWN0aW9uVHlwZS5HZXRNZW1iZXIsIDB4NGVdLFxuICAgIFtBY3Rpb25UeXBlLkdldFByb3BlcnR5LCAweDIyXSxcbiAgICBbQWN0aW9uVHlwZS5HZXRUaW1lLCAweDM0XSxcbiAgICBbQWN0aW9uVHlwZS5HZXRVcmwsIFtlbWl0R2V0VXJsQWN0aW9uLCAweDgzXV0sXG4gICAgW0FjdGlvblR5cGUuR2V0VXJsMiwgW2VtaXRHZXRVcmwyQWN0aW9uLCAweDlhXV0sXG4gICAgW0FjdGlvblR5cGUuR2V0VmFyaWFibGUsIDB4MWNdLFxuICAgIFtBY3Rpb25UeXBlLkdvdG9GcmFtZSwgW2VtaXRHb3RvRnJhbWVBY3Rpb24sIDB4ODFdXSxcbiAgICBbQWN0aW9uVHlwZS5Hb3RvRnJhbWUyLCBbZW1pdEdvdG9GcmFtZTJBY3Rpb24sIDB4OWZdXSxcbiAgICBbQWN0aW9uVHlwZS5Hb3RvTGFiZWwsIFtlbWl0R290b0xhYmVsQWN0aW9uLCAweDhjXV0sXG4gICAgW0FjdGlvblR5cGUuR3JlYXRlciwgMHg2N10sXG4gICAgW0FjdGlvblR5cGUuSWYsIFtlbWl0SWZBY3Rpb24sIDB4OWRdXSxcbiAgICBbQWN0aW9uVHlwZS5JbXBsZW1lbnRzT3AsIDB4MmNdLFxuICAgIFtBY3Rpb25UeXBlLkluY3JlbWVudCwgMHg1MF0sXG4gICAgW0FjdGlvblR5cGUuSW5pdEFycmF5LCAweDQyXSxcbiAgICBbQWN0aW9uVHlwZS5Jbml0T2JqZWN0LCAweDQzXSxcbiAgICBbQWN0aW9uVHlwZS5JbnN0YW5jZU9mLCAweDU0XSxcbiAgICBbQWN0aW9uVHlwZS5KdW1wLCBbZW1pdEp1bXBBY3Rpb24sIDB4OTldXSxcbiAgICBbQWN0aW9uVHlwZS5MZXNzLCAweDBmXSxcbiAgICBbQWN0aW9uVHlwZS5MZXNzMiwgMHg0OF0sXG4gICAgW0FjdGlvblR5cGUuTWJBc2NpaVRvQ2hhciwgMHgzN10sXG4gICAgW0FjdGlvblR5cGUuTWJDaGFyVG9Bc2NpaSwgMHgzNl0sXG4gICAgW0FjdGlvblR5cGUuTWJTdHJpbmdFeHRyYWN0LCAweDM1XSxcbiAgICBbQWN0aW9uVHlwZS5NYlN0cmluZ0xlbmd0aCwgMHgzMV0sXG4gICAgW0FjdGlvblR5cGUuTW9kdWxvLCAweDNmXSxcbiAgICBbQWN0aW9uVHlwZS5NdWx0aXBseSwgMHgwY10sXG4gICAgW0FjdGlvblR5cGUuTmV3TWV0aG9kLCAweDUzXSxcbiAgICBbQWN0aW9uVHlwZS5OZXdPYmplY3QsIDB4NDBdLFxuICAgIFtBY3Rpb25UeXBlLk5leHRGcmFtZSwgMHgwNF0sXG4gICAgW0FjdGlvblR5cGUuTm90LCAweDEyXSxcbiAgICBbQWN0aW9uVHlwZS5PciwgMHgxMV0sXG4gICAgW0FjdGlvblR5cGUuUGxheSwgMHgwNl0sXG4gICAgW0FjdGlvblR5cGUuUG9wLCAweDE3XSxcbiAgICBbQWN0aW9uVHlwZS5QcmV2aW91c0ZyYW1lLCAweDA1XSxcbiAgICBbQWN0aW9uVHlwZS5QdXNoLCBbZW1pdFB1c2hBY3Rpb24sIDB4OTZdXSxcbiAgICBbQWN0aW9uVHlwZS5QdXNoRHVwbGljYXRlLCAweDRjXSxcbiAgICBbQWN0aW9uVHlwZS5SYW5kb21OdW1iZXIsIDB4MzBdLFxuICAgIFtBY3Rpb25UeXBlLlJldHVybiwgMHgzZV0sXG4gICAgW0FjdGlvblR5cGUuUmVtb3ZlU3ByaXRlLCAweDI1XSxcbiAgICBbQWN0aW9uVHlwZS5TZXRNZW1iZXIsIDB4NGZdLFxuICAgIFtBY3Rpb25UeXBlLlNldFByb3BlcnR5LCAweDIzXSxcbiAgICBbQWN0aW9uVHlwZS5TZXRUYXJnZXQsIFtlbWl0U2V0VGFyZ2V0QWN0aW9uLCAweDhiXV0sXG4gICAgW0FjdGlvblR5cGUuU2V0VGFyZ2V0MiwgMHgyMF0sXG4gICAgW0FjdGlvblR5cGUuU2V0VmFyaWFibGUsIDB4MWRdLFxuICAgIFtBY3Rpb25UeXBlLlN0YWNrU3dhcCwgMHg0ZF0sXG4gICAgW0FjdGlvblR5cGUuU3RhcnREcmFnLCAweDI3XSxcbiAgICBbQWN0aW9uVHlwZS5TdG9wLCAweDA3XSxcbiAgICBbQWN0aW9uVHlwZS5TdG9wU291bmRzLCAweDA5XSxcbiAgICBbQWN0aW9uVHlwZS5TdG9yZVJlZ2lzdGVyLCBbZW1pdFN0b3JlUmVnaXN0ZXJBY3Rpb24sIDB4ODddXSxcbiAgICBbQWN0aW9uVHlwZS5TdHJpY3RFcXVhbHMsIDB4NjZdLFxuICAgIFtBY3Rpb25UeXBlLlN0cmluZ0FkZCwgMHgyMV0sXG4gICAgW0FjdGlvblR5cGUuU3RyaW5nRXF1YWxzLCAweDEzXSxcbiAgICBbQWN0aW9uVHlwZS5TdHJpbmdFeHRyYWN0LCAweDE1XSxcbiAgICBbQWN0aW9uVHlwZS5TdHJpbmdHcmVhdGVyLCAweDY4XSxcbiAgICBbQWN0aW9uVHlwZS5TdHJpbmdMZW5ndGgsIDB4MTRdLFxuICAgIFtBY3Rpb25UeXBlLlN0cmluZ0xlc3MsIDB4MjldLFxuICAgIFtBY3Rpb25UeXBlLlN1YnRyYWN0LCAweDBiXSxcbiAgICBbQWN0aW9uVHlwZS5UYXJnZXRQYXRoLCAweDQ1XSxcbiAgICBbQWN0aW9uVHlwZS5UaHJvdywgMHgyYV0sXG4gICAgW0FjdGlvblR5cGUuVG9JbnRlZ2VyLCAweDE4XSxcbiAgICBbQWN0aW9uVHlwZS5Ub051bWJlciwgMHg0YV0sXG4gICAgW0FjdGlvblR5cGUuVG9TdHJpbmcsIDB4NGJdLFxuICAgIFtBY3Rpb25UeXBlLlRvZ2dsZVF1YWxpdHksIDB4MDhdLFxuICAgIFtBY3Rpb25UeXBlLlRyYWNlLCAweDI2XSxcbiAgICBbQWN0aW9uVHlwZS5UcnksIFtlbWl0VHJ5QWN0aW9uLCAweDhmXV0sXG4gICAgW0FjdGlvblR5cGUuVHlwZU9mLCAweDQ0XSxcbiAgICBbQWN0aW9uVHlwZS5XYWl0Rm9yRnJhbWUsIFtlbWl0V2FpdEZvckZyYW1lQWN0aW9uLCAweDhhXV0sXG4gICAgW0FjdGlvblR5cGUuV2FpdEZvckZyYW1lMiwgW2VtaXRXYWl0Rm9yRnJhbWUyQWN0aW9uLCAweDhkXV0sXG4gICAgW0FjdGlvblR5cGUuV2l0aCwgW2VtaXRXaXRoQWN0aW9uLCAweDk0XV0sXG4gIF0pO1xuXG4gIGNvbnN0IGFjdGlvbkVtaXR0ZXI6IEFjdGlvbkVtaXR0ZXIgfCB1bmRlZmluZWQgPSBBQ1RJT05fVFlQRV9UT19FTUlUVEVSLmdldCh2YWx1ZS5hY3Rpb24pO1xuXG4gIGlmIChhY3Rpb25FbWl0dGVyID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgSW5jaWRlbnQoXCJVbmV4cGVjdGVkQWN0aW9uXCIsIHt0eXBlOiB2YWx1ZS5hY3Rpb24sIHR5cGVOYW1lOiBBY3Rpb25UeXBlW3ZhbHVlLmFjdGlvbl19KTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgYWN0aW9uRW1pdHRlciA9PT0gXCJudW1iZXJcIikge1xuICAgIGVtaXRBY3Rpb25IZWFkZXIoYnl0ZVN0cmVhbSwge2FjdGlvbkNvZGU6IGFjdGlvbkVtaXR0ZXIsIGxlbmd0aDogMH0pO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGFjdGlvblN0cmVhbTogU3RyZWFtID0gbmV3IFN0cmVhbSgpO1xuICBhY3Rpb25FbWl0dGVyWzBdKGFjdGlvblN0cmVhbSwgdmFsdWUpO1xuICBlbWl0QWN0aW9uSGVhZGVyKFxuICAgIGJ5dGVTdHJlYW0sXG4gICAge1xuICAgICAgYWN0aW9uQ29kZTogYWN0aW9uRW1pdHRlclsxXSxcbiAgICAgIGxlbmd0aDogYWN0aW9uU3RyZWFtLmJ5dGVQb3MsXG4gICAgfSxcbiAgKTtcbiAgYnl0ZVN0cmVhbS53cml0ZShhY3Rpb25TdHJlYW0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW1pdEdvdG9GcmFtZUFjdGlvbihieXRlU3RyZWFtOiBCeXRlU3RyZWFtLCB2YWx1ZTogYWN0aW9ucy5Hb3RvRnJhbWUpOiB2b2lkIHtcbiAgYnl0ZVN0cmVhbS53cml0ZVVpbnQxNkxFKHZhbHVlLmZyYW1lKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVtaXRHZXRVcmxBY3Rpb24oYnl0ZVN0cmVhbTogQnl0ZVN0cmVhbSwgdmFsdWU6IGFjdGlvbnMuR2V0VXJsKTogdm9pZCB7XG4gIGJ5dGVTdHJlYW0ud3JpdGVOdWxVdGY4KHZhbHVlLnVybCk7XG4gIGJ5dGVTdHJlYW0ud3JpdGVOdWxVdGY4KHZhbHVlLnRhcmdldCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbWl0U3RvcmVSZWdpc3RlckFjdGlvbihieXRlU3RyZWFtOiBCeXRlU3RyZWFtLCB2YWx1ZTogYWN0aW9ucy5TdG9yZVJlZ2lzdGVyKTogdm9pZCB7XG4gIGJ5dGVTdHJlYW0ud3JpdGVVaW50OCh2YWx1ZS5yZWdpc3Rlcik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbWl0Q29uc3RhbnRQb29sQWN0aW9uKGJ5dGVTdHJlYW06IEJ5dGVTdHJlYW0sIHZhbHVlOiBhY3Rpb25zLkNvbnN0YW50UG9vbCk6IHZvaWQge1xuICBieXRlU3RyZWFtLndyaXRlVWludDE2TEUodmFsdWUucG9vbC5sZW5ndGgpO1xuICBmb3IgKGNvbnN0IGNvbnN0YW50IG9mIHZhbHVlLnBvb2wpIHtcbiAgICBieXRlU3RyZWFtLndyaXRlTnVsVXRmOChjb25zdGFudCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVtaXRXYWl0Rm9yRnJhbWVBY3Rpb24oYnl0ZVN0cmVhbTogQnl0ZVN0cmVhbSwgdmFsdWU6IGFjdGlvbnMuV2FpdEZvckZyYW1lKTogdm9pZCB7XG4gIGJ5dGVTdHJlYW0ud3JpdGVVaW50MTZMRSh2YWx1ZS5mcmFtZSk7XG4gIGJ5dGVTdHJlYW0ud3JpdGVVaW50OCh2YWx1ZS5za2lwKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVtaXRTZXRUYXJnZXRBY3Rpb24oYnl0ZVN0cmVhbTogQnl0ZVN0cmVhbSwgdmFsdWU6IGFjdGlvbnMuU2V0VGFyZ2V0KTogdm9pZCB7XG4gIGJ5dGVTdHJlYW0ud3JpdGVOdWxVdGY4KHZhbHVlLnRhcmdldE5hbWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW1pdEdvdG9MYWJlbEFjdGlvbihieXRlU3RyZWFtOiBCeXRlU3RyZWFtLCB2YWx1ZTogYWN0aW9ucy5Hb3RvTGFiZWwpOiB2b2lkIHtcbiAgYnl0ZVN0cmVhbS53cml0ZU51bFV0ZjgodmFsdWUubGFiZWwpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW1pdFdhaXRGb3JGcmFtZTJBY3Rpb24oYnl0ZVN0cmVhbTogQnl0ZVN0cmVhbSwgdmFsdWU6IGFjdGlvbnMuV2FpdEZvckZyYW1lMik6IHZvaWQge1xuICBieXRlU3RyZWFtLndyaXRlVWludDgodmFsdWUuc2tpcCk7XG59XG5cbi8qKlxuICogRW1pdHMgYSBEZWZpbmVGdW5jdGlvbjIgYWN0aW9uLlxuICpcbiAqIEBwYXJhbSBieXRlU3RyZWFtIFRoZSBieXRlc3RyZWFtIHVzZWQgdG8gZW1pdCB0aGUgYWN0aW9uLlxuICogQHBhcmFtIHZhbHVlIERlZmluZUZ1bmN0aW9uMiBhY3Rpb24gdG8gZW1pdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVtaXREZWZpbmVGdW5jdGlvbjJBY3Rpb24oYnl0ZVN0cmVhbTogQnl0ZVN0cmVhbSwgdmFsdWU6IGFjdGlvbnMuRGVmaW5lRnVuY3Rpb24yKTogdm9pZCB7XG4gIGJ5dGVTdHJlYW0ud3JpdGVOdWxVdGY4KHZhbHVlLm5hbWUpO1xuICBieXRlU3RyZWFtLndyaXRlVWludDE2TEUodmFsdWUucGFyYW1ldGVycy5sZW5ndGgpO1xuICBieXRlU3RyZWFtLndyaXRlVWludDgodmFsdWUucmVnaXN0ZXJDb3VudCk7XG5cbiAgY29uc3QgZmxhZ3M6IFVpbnQxNiA9IDBcbiAgICB8ICh2YWx1ZS5wcmVsb2FkVGhpcyA/IDEgPDwgMCA6IDApXG4gICAgfCAodmFsdWUuc3VwcHJlc3NUaGlzID8gMSA8PCAxIDogMClcbiAgICB8ICh2YWx1ZS5wcmVsb2FkQXJndW1lbnRzID8gMSA8PCAyIDogMClcbiAgICB8ICh2YWx1ZS5zdXBwcmVzc0FyZ3VtZW50cyA/IDEgPDwgMyA6IDApXG4gICAgfCAodmFsdWUucHJlbG9hZFN1cGVyID8gMSA8PCA0IDogMClcbiAgICB8ICh2YWx1ZS5zdXBwcmVzc1N1cGVyID8gMSA8PCA1IDogMClcbiAgICB8ICh2YWx1ZS5wcmVsb2FkUm9vdCA/IDEgPDwgNiA6IDApXG4gICAgfCAodmFsdWUucHJlbG9hZFBhcmVudCA/IDEgPDwgNyA6IDApXG4gICAgfCAodmFsdWUucHJlbG9hZEdsb2JhbCA/IDEgPDwgOCA6IDApO1xuICBieXRlU3RyZWFtLndyaXRlVWludDE2TEUoZmxhZ3MpO1xuXG4gIGZvciAoY29uc3QgcGFyYW1ldGVyIG9mIHZhbHVlLnBhcmFtZXRlcnMpIHtcbiAgICBieXRlU3RyZWFtLndyaXRlVWludDgocGFyYW1ldGVyLnJlZ2lzdGVyKTtcbiAgICBieXRlU3RyZWFtLndyaXRlTnVsVXRmOChwYXJhbWV0ZXIubmFtZSk7XG4gIH1cblxuICBieXRlU3RyZWFtLndyaXRlVWludDE2TEUodmFsdWUuYm9keVNpemUpO1xufVxuXG5mdW5jdGlvbiBlbWl0Q2F0Y2hUYXJnZXQoYnl0ZVN0cmVhbTogQnl0ZVN0cmVhbSwgdmFsdWU6IENhdGNoVGFyZ2V0KTogdm9pZCB7XG4gIGlmICh2YWx1ZS50eXBlID09PSBDYXRjaFRhcmdldFR5cGUuUmVnaXN0ZXIpIHtcbiAgICBieXRlU3RyZWFtLndyaXRlVWludDgodmFsdWUudGFyZ2V0KTtcbiAgfSBlbHNlIHtcbiAgICBieXRlU3RyZWFtLndyaXRlTnVsVXRmOCh2YWx1ZS50YXJnZXQpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbWl0VHJ5QWN0aW9uKGJ5dGVTdHJlYW06IEJ5dGVTdHJlYW0sIHZhbHVlOiBhY3Rpb25zLlRyeSk6IHZvaWQge1xuICBjb25zdCBjYXRjaEluUmVnaXN0ZXI6IGJvb2xlYW4gPSB2YWx1ZS5jYXRjaCAhPT0gdW5kZWZpbmVkXG4gICAgJiYgdmFsdWUuY2F0Y2gudGFyZ2V0LnR5cGUgPT09IENhdGNoVGFyZ2V0VHlwZS5SZWdpc3RlcjtcblxuICBjb25zdCBmbGFnczogVWludDggPSAwXG4gICAgfCAodmFsdWUuY2F0Y2ggIT09IHVuZGVmaW5lZCA/IDEgPDwgMCA6IDApXG4gICAgfCAodmFsdWUuZmluYWxseSAhPT0gdW5kZWZpbmVkID8gMSA8PCAxIDogMClcbiAgICB8IChjYXRjaEluUmVnaXN0ZXIgPyAxIDw8IDIgOiAwKTtcbiAgLy8gKFNraXAgNSBiaXRzKVxuICBieXRlU3RyZWFtLndyaXRlVWludDgoZmxhZ3MpO1xuXG4gIGJ5dGVTdHJlYW0ud3JpdGVVaW50MTZMRSh2YWx1ZS50cnkpO1xuICBieXRlU3RyZWFtLndyaXRlVWludDE2TEUodmFsdWUuY2F0Y2ggIT09IHVuZGVmaW5lZCA/IHZhbHVlLmNhdGNoLnNpemUgOiAwKTtcbiAgYnl0ZVN0cmVhbS53cml0ZVVpbnQxNkxFKHZhbHVlLmZpbmFsbHkgIT09IHVuZGVmaW5lZCA/IHZhbHVlLmZpbmFsbHkgOiAwKTtcbiAgZW1pdENhdGNoVGFyZ2V0KFxuICAgIGJ5dGVTdHJlYW0sXG4gICAgdmFsdWUuY2F0Y2ggIT09IHVuZGVmaW5lZCA/IHZhbHVlLmNhdGNoLnRhcmdldCA6IHt0eXBlOiBDYXRjaFRhcmdldFR5cGUuUmVnaXN0ZXIsIHRhcmdldDogMH0sXG4gICk7XG59XG5cbi8qKlxuICogRW1pdHMgYSBXaXRoIGFjdGlvbi5cbiAqXG4gKiBAcGFyYW0gYnl0ZVN0cmVhbSBUaGUgYnl0ZXN0cmVhbSB1c2VkIHRvIGVtaXQgdGhlIGFjdGlvbi5cbiAqIEBwYXJhbSB2YWx1ZSBXaXRoIGFjdGlvbiB0byBlbWl0LlxuICogQHJldHVybnMgVGhlIGxlbmd0aCBmb3IgdGhlIGFjdGlvbiBoZWFkZXIgKGV4Y2x1ZGluZyB0aGUgd2l0aCBib2R5KS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVtaXRXaXRoQWN0aW9uKGJ5dGVTdHJlYW06IEJ5dGVTdHJlYW0sIHZhbHVlOiBhY3Rpb25zLldpdGgpOiB2b2lkIHtcbiAgYnl0ZVN0cmVhbS53cml0ZVVpbnQxNkxFKHZhbHVlLnNpemUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW1pdFB1c2hBY3Rpb24oYnl0ZVN0cmVhbTogQnl0ZVN0cmVhbSwgdmFsdWU6IGFjdGlvbnMuUHVzaCk6IHZvaWQge1xuICBmb3IgKGNvbnN0IHB1c2hlZCBvZiB2YWx1ZS52YWx1ZXMpIHtcbiAgICBlbWl0QWN0aW9uVmFsdWUoYnl0ZVN0cmVhbSwgcHVzaGVkKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZW1pdEFjdGlvblZhbHVlKGJ5dGVTdHJlYW06IEJ5dGVTdHJlYW0sIHZhbHVlOiBQdXNoVmFsdWUpOiB2b2lkIHtcbiAgc3dpdGNoICh2YWx1ZS50eXBlKSB7XG4gICAgY2FzZSBQdXNoVmFsdWVUeXBlLkJvb2xlYW46XG4gICAgICBieXRlU3RyZWFtLndyaXRlVWludDgoNSk7XG4gICAgICBieXRlU3RyZWFtLndyaXRlVWludDgodmFsdWUudmFsdWUgPyAxIDogMCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFB1c2hWYWx1ZVR5cGUuQ29uc3RhbnQ6XG4gICAgICBpZiAodmFsdWUudmFsdWUgPiAweGZmKSB7XG4gICAgICAgIGJ5dGVTdHJlYW0ud3JpdGVVaW50OCg5KTtcbiAgICAgICAgYnl0ZVN0cmVhbS53cml0ZVVpbnQxNkxFKHZhbHVlLnZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJ5dGVTdHJlYW0ud3JpdGVVaW50OCg4KTtcbiAgICAgICAgYnl0ZVN0cmVhbS53cml0ZVVpbnQ4KHZhbHVlLnZhbHVlIGFzIFVpbnQ4KTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgUHVzaFZhbHVlVHlwZS5TdHJpbmc6XG4gICAgICBieXRlU3RyZWFtLndyaXRlVWludDgoMCk7XG4gICAgICBieXRlU3RyZWFtLndyaXRlTnVsVXRmOCh2YWx1ZS52YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFB1c2hWYWx1ZVR5cGUuU2ludDMyOlxuICAgICAgYnl0ZVN0cmVhbS53cml0ZVVpbnQ4KDcpO1xuICAgICAgYnl0ZVN0cmVhbS53cml0ZVNpbnQzMkxFKHZhbHVlLnZhbHVlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgUHVzaFZhbHVlVHlwZS5GbG9hdDMyOlxuICAgICAgYnl0ZVN0cmVhbS53cml0ZVVpbnQ4KDEpO1xuICAgICAgYnl0ZVN0cmVhbS53cml0ZUZsb2F0MzJMRSh2YWx1ZS52YWx1ZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFB1c2hWYWx1ZVR5cGUuRmxvYXQ2NDpcbiAgICAgIGJ5dGVTdHJlYW0ud3JpdGVVaW50OCg2KTtcbiAgICAgIGJ5dGVTdHJlYW0ud3JpdGVGbG9hdDY0TEUodmFsdWUudmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBQdXNoVmFsdWVUeXBlLk51bGw6XG4gICAgICBieXRlU3RyZWFtLndyaXRlVWludDgoMik7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFB1c2hWYWx1ZVR5cGUuUmVnaXN0ZXI6XG4gICAgICBieXRlU3RyZWFtLndyaXRlVWludDgoNCk7XG4gICAgICBieXRlU3RyZWFtLndyaXRlVWludDgodmFsdWUudmFsdWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBQdXNoVmFsdWVUeXBlLlVuZGVmaW5lZDpcbiAgICAgIGJ5dGVTdHJlYW0ud3JpdGVVaW50OCgzKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgSW5jaWRlbnQoXCJVbmV4cGVjdGVkVmFsdWVUeXBlXCIpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbWl0SnVtcEFjdGlvbihieXRlU3RyZWFtOiBCeXRlU3RyZWFtLCB2YWx1ZTogYWN0aW9ucy5KdW1wKTogdm9pZCB7XG4gIGJ5dGVTdHJlYW0ud3JpdGVVaW50MTZMRSh2YWx1ZS5vZmZzZXQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW1pdEdldFVybDJBY3Rpb24oYnl0ZVN0cmVhbTogQnl0ZVN0cmVhbSwgdmFsdWU6IGFjdGlvbnMuR2V0VXJsMik6IHZvaWQge1xuICBjb25zdCBNRVRIT0RfVE9fQ09ERTogTWFwPEdldFVybDJNZXRob2QsIFVpbnQyPiA9IG5ldyBNYXAoW1xuICAgIFtHZXRVcmwyTWV0aG9kLk5vbmUsIDAgYXMgVWludDJdLFxuICAgIFtHZXRVcmwyTWV0aG9kLkdldCwgMSBhcyBVaW50Ml0sXG4gICAgW0dldFVybDJNZXRob2QuUG9zdCwgMiBhcyBVaW50Ml0sXG4gIF0pO1xuICBjb25zdCBtZXRob2RDb2RlOiBVaW50MiB8IHVuZGVmaW5lZCA9IE1FVEhPRF9UT19DT0RFLmdldCh2YWx1ZS5tZXRob2QpO1xuICBpZiAobWV0aG9kQ29kZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEluY2lkZW50KFwiVW5leHBlY3RlZEdldFVybDJNZXRob2RcIik7XG4gIH1cblxuICBjb25zdCBmbGFnczogVWludDggPSAwXG4gICAgfCAodmFsdWUubG9hZFZhcmlhYmxlcyA/IDEgPDwgMCA6IDApXG4gICAgfCAodmFsdWUubG9hZFRhcmdldCA/IDEgPDwgMSA6IDApXG4gICAgfCAobWV0aG9kQ29kZSA8PCA2KTtcblxuICBieXRlU3RyZWFtLndyaXRlVWludDgoZmxhZ3MpO1xufVxuXG4vKipcbiAqIEVtaXRzIGEgRGVmaW5lRnVuY3Rpb24gYWN0aW9uLlxuICpcbiAqIEBwYXJhbSBieXRlU3RyZWFtIFRoZSBieXRlc3RyZWFtIHVzZWQgdG8gZW1pdCB0aGUgYWN0aW9uLlxuICogQHBhcmFtIHZhbHVlIERlZmluZUZ1bmN0aW9uIGFjdGlvbiB0byBlbWl0LlxuICogQHJldHVybnMgVGhlIGxlbmd0aCBmb3IgdGhlIGFjdGlvbiBoZWFkZXIgKGV4Y2x1ZGluZyB0aGUgZnVuY3Rpb24gYm9keSkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbWl0RGVmaW5lRnVuY3Rpb25BY3Rpb24oYnl0ZVN0cmVhbTogQnl0ZVN0cmVhbSwgdmFsdWU6IGFjdGlvbnMuRGVmaW5lRnVuY3Rpb24pOiB2b2lkIHtcbiAgYnl0ZVN0cmVhbS53cml0ZU51bFV0ZjgodmFsdWUubmFtZSk7XG4gIGJ5dGVTdHJlYW0ud3JpdGVVaW50MTZMRSh2YWx1ZS5wYXJhbWV0ZXJzLmxlbmd0aCk7XG4gIGZvciAoY29uc3QgcGFyYW1ldGVyIG9mIHZhbHVlLnBhcmFtZXRlcnMpIHtcbiAgICBieXRlU3RyZWFtLndyaXRlTnVsVXRmOChwYXJhbWV0ZXIpO1xuICB9XG5cbiAgYnl0ZVN0cmVhbS53cml0ZVVpbnQxNkxFKHZhbHVlLmJvZHlTaXplKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVtaXRJZkFjdGlvbihieXRlU3RyZWFtOiBCeXRlU3RyZWFtLCB2YWx1ZTogYWN0aW9ucy5JZik6IHZvaWQge1xuICBieXRlU3RyZWFtLndyaXRlVWludDE2TEUodmFsdWUub2Zmc2V0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVtaXRHb3RvRnJhbWUyQWN0aW9uKGJ5dGVTdHJlYW06IEJ5dGVTdHJlYW0sIHZhbHVlOiBhY3Rpb25zLkdvdG9GcmFtZTIpOiB2b2lkIHtcbiAgY29uc3QgaGFzU2NlbmVCaWFzOiBib29sZWFuID0gdmFsdWUuc2NlbmVCaWFzICE9PSAwO1xuICBjb25zdCBmbGFnczogVWludDggPSAwXG4gICAgfCAodmFsdWUucGxheSA/IDEgPDwgMCA6IDApXG4gICAgfCAoaGFzU2NlbmVCaWFzID8gMSA8PCAxIDogMCk7XG4gIGJ5dGVTdHJlYW0ud3JpdGVVaW50OChmbGFncyk7XG4gIC8vIFNraXAgNiBiaXRzXG4gIGlmIChoYXNTY2VuZUJpYXMpIHtcbiAgICBieXRlU3RyZWFtLndyaXRlVWludDE2TEUodmFsdWUuc2NlbmVCaWFzKTtcbiAgfVxufVxuIl0sInNvdXJjZVJvb3QiOiIuLiJ9 |
@@ -1,11 +0,2 @@ | ||
import { Action } from "avm1-types/action"; | ||
import { UintSize } from "semantic-types"; | ||
export { emitAction } from "./emitters/avm1"; | ||
export { cfgToBytes } from "./cfg-to-bytes"; | ||
export declare class Avm1Emitter { | ||
private stream; | ||
constructor(); | ||
getByteOffset(): UintSize; | ||
writeAction(action: Action): void; | ||
getBytes(): Uint8Array; | ||
} |
23
index.js
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
const stream_1 = require("@open-flash/stream"); | ||
const avm1_1 = require("./emitters/avm1"); | ||
var avm1_2 = require("./emitters/avm1"); | ||
exports.emitAction = avm1_2.emitAction; | ||
var avm1_1 = require("./emitters/avm1"); | ||
exports.emitAction = avm1_1.emitAction; | ||
var cfg_to_bytes_1 = require("./cfg-to-bytes"); | ||
exports.cfgToBytes = cfg_to_bytes_1.cfgToBytes; | ||
class Avm1Emitter { | ||
constructor() { | ||
this.stream = new stream_1.WritableStream(); | ||
} | ||
getByteOffset() { | ||
return this.stream.bytePos; | ||
} | ||
writeAction(action) { | ||
avm1_1.emitAction(this.stream, action); | ||
} | ||
getBytes() { | ||
return this.stream.getBytes(); | ||
} | ||
} | ||
exports.Avm1Emitter = Avm1Emitter; | ||
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIl9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwrQ0FBb0Q7QUFHcEQsMENBQTZDO0FBRTdDLHdDQUE2QztBQUFwQyw0QkFBQSxVQUFVLENBQUE7QUFDbkIsK0NBQTRDO0FBQW5DLG9DQUFBLFVBQVUsQ0FBQTtBQUVuQixNQUFhLFdBQVc7SUFHdEI7UUFDRSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksdUJBQWMsRUFBRSxDQUFDO0lBQ3JDLENBQUM7SUFFRCxhQUFhO1FBQ1gsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztJQUM3QixDQUFDO0lBRUQsV0FBVyxDQUFDLE1BQWM7UUFDeEIsaUJBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxRQUFRO1FBQ04sT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2hDLENBQUM7Q0FDRjtBQWxCRCxrQ0FrQkMiLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBXcml0YWJsZVN0cmVhbSB9IGZyb20gXCJAb3Blbi1mbGFzaC9zdHJlYW1cIjtcbmltcG9ydCB7IEFjdGlvbiB9IGZyb20gXCJhdm0xLXR5cGVzL2FjdGlvblwiO1xuaW1wb3J0IHsgVWludFNpemUgfSBmcm9tIFwic2VtYW50aWMtdHlwZXNcIjtcbmltcG9ydCB7IGVtaXRBY3Rpb24gfSBmcm9tIFwiLi9lbWl0dGVycy9hdm0xXCI7XG5cbmV4cG9ydCB7IGVtaXRBY3Rpb24gfSBmcm9tIFwiLi9lbWl0dGVycy9hdm0xXCI7XG5leHBvcnQgeyBjZmdUb0J5dGVzIH0gZnJvbSBcIi4vY2ZnLXRvLWJ5dGVzXCI7XG5cbmV4cG9ydCBjbGFzcyBBdm0xRW1pdHRlciB7XG4gIHByaXZhdGUgc3RyZWFtOiBXcml0YWJsZVN0cmVhbTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnN0cmVhbSA9IG5ldyBXcml0YWJsZVN0cmVhbSgpO1xuICB9XG5cbiAgZ2V0Qnl0ZU9mZnNldCgpOiBVaW50U2l6ZSB7XG4gICAgcmV0dXJuIHRoaXMuc3RyZWFtLmJ5dGVQb3M7XG4gIH1cblxuICB3cml0ZUFjdGlvbihhY3Rpb246IEFjdGlvbik6IHZvaWQge1xuICAgIGVtaXRBY3Rpb24odGhpcy5zdHJlYW0sIGFjdGlvbik7XG4gIH1cblxuICBnZXRCeXRlcygpOiBVaW50OEFycmF5IHtcbiAgICByZXR1cm4gdGhpcy5zdHJlYW0uZ2V0Qnl0ZXMoKTtcbiAgfVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ== | ||
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIl9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSx3Q0FBNkM7QUFBcEMsNEJBQUEsVUFBVSxDQUFBO0FBQ25CLCtDQUE0QztBQUFuQyxvQ0FBQSxVQUFVLENBQUEiLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBlbWl0QWN0aW9uIH0gZnJvbSBcIi4vZW1pdHRlcnMvYXZtMVwiO1xuZXhwb3J0IHsgY2ZnVG9CeXRlcyB9IGZyb20gXCIuL2NmZy10by1ieXRlc1wiO1xuIl0sInNvdXJjZVJvb3QiOiIifQ== |
{ | ||
"name": "avm1-emitter", | ||
"version": "0.9.0", | ||
"version": "0.10.0", | ||
"description": "AVM1 files emitter", | ||
@@ -17,4 +17,4 @@ "main": "index", | ||
"dependencies": { | ||
"@open-flash/stream": "^0.1.1", | ||
"avm1-types": "^0.9.0", | ||
"@open-flash/stream": "^0.3.0", | ||
"avm1-types": "^0.10.0", | ||
"incident": "^3.2.0", | ||
@@ -24,9 +24,9 @@ "semantic-types": "^0.1.1" | ||
"devDependencies": { | ||
"@types/chai": "^4.2.3", | ||
"@types/chai": "^4.2.9", | ||
"@types/gulp": "^4.0.6", | ||
"@types/minimist": "^1.2.0", | ||
"@types/mocha": "^5.2.7", | ||
"@types/node": "^12.6.1", | ||
"avm1-asm": "^0.9.0", | ||
"avm1-parser": "^0.9.1", | ||
"@types/mocha": "^7.0.1", | ||
"@types/node": "^13.7.4", | ||
"avm1-asm": "^0.10.0", | ||
"avm1-parser": "^0.10.0", | ||
"chai": "^4.2.0", | ||
@@ -37,7 +37,7 @@ "gulp": "^4.0.2", | ||
"minimist": "^1.2.0", | ||
"swf-parser": "^0.8.0", | ||
"ts-node": "^8.4.1", | ||
"tslint": "^5.20.0", | ||
"turbo-gulp": "^0.20.1", | ||
"typescript": "^3.6.3" | ||
"swf-parser": "^0.11.0", | ||
"ts-node": "^8.6.2", | ||
"tslint": "^6.0.0", | ||
"turbo-gulp": "^0.22.1", | ||
"typescript": "^3.8.2" | ||
}, | ||
@@ -50,4 +50,4 @@ "c88": { | ||
}, | ||
"gitHead": "18ccb0b1457707394f2a6522558753a58ad1cc5e", | ||
"gitHead": "7053c1fe84fbbd4ba2185d7f72f52f580ab7e3e2", | ||
"private": false | ||
} |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
187471
2170
+ Added@open-flash/stream@0.3.0(transitive)
+ Added@types/node@22.13.1(transitive)
+ Addedavm1-types@0.10.0(transitive)
+ Addedobject-inspect@1.13.4(transitive)
- Removed@open-flash/stream@0.1.1(transitive)
- Removed@types/node@22.13.0(transitive)
- Removed@types/unorm@1.3.31(transitive)
- Removedavm1-types@0.9.0(transitive)
- Removedkryo@0.7.0(transitive)
- Removedobject-inspect@1.13.3(transitive)
- Removedunorm@1.6.0(transitive)
Updated@open-flash/stream@^0.3.0
Updatedavm1-types@^0.10.0