@aztec/sequencer-client 0.20.0 → 0.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/dest/block_builder/solo_block_builder.d.ts +0 -3
  2. package/dest/block_builder/solo_block_builder.d.ts.map +1 -1
  3. package/dest/block_builder/solo_block_builder.js +29 -48
  4. package/dest/config.js +3 -3
  5. package/dest/global_variable_builder/global_builder.js +1 -1
  6. package/dest/publisher/l1-publisher.js +1 -1
  7. package/dest/publisher/viem-tx-sender.js +4 -4
  8. package/dest/sequencer/abstract_phase_manager.d.ts +79 -0
  9. package/dest/sequencer/abstract_phase_manager.d.ts.map +1 -0
  10. package/dest/sequencer/abstract_phase_manager.js +227 -0
  11. package/dest/sequencer/application_logic_phase_manager.d.ts +39 -0
  12. package/dest/sequencer/application_logic_phase_manager.d.ts.map +1 -0
  13. package/dest/sequencer/application_logic_phase_manager.js +64 -0
  14. package/dest/sequencer/fee_distribution_phase_manager.d.ts +38 -0
  15. package/dest/sequencer/fee_distribution_phase_manager.d.ts.map +1 -0
  16. package/dest/sequencer/fee_distribution_phase_manager.js +42 -0
  17. package/dest/sequencer/fee_preparation_phase_manager.d.ts +38 -0
  18. package/dest/sequencer/fee_preparation_phase_manager.d.ts.map +1 -0
  19. package/dest/sequencer/fee_preparation_phase_manager.js +43 -0
  20. package/dest/sequencer/index.d.ts +0 -1
  21. package/dest/sequencer/index.d.ts.map +1 -1
  22. package/dest/sequencer/index.js +1 -2
  23. package/dest/sequencer/processed_tx.d.ts +6 -11
  24. package/dest/sequencer/processed_tx.d.ts.map +1 -1
  25. package/dest/sequencer/processed_tx.js +4 -4
  26. package/dest/sequencer/public_processor.d.ts +7 -32
  27. package/dest/sequencer/public_processor.d.ts.map +1 -1
  28. package/dest/sequencer/public_processor.js +32 -236
  29. package/dest/sequencer/sequencer.d.ts.map +1 -1
  30. package/dest/sequencer/sequencer.js +9 -8
  31. package/dest/simulator/public_executor.d.ts +3 -3
  32. package/dest/simulator/public_executor.d.ts.map +1 -1
  33. package/dest/simulator/public_executor.js +4 -7
  34. package/dest/simulator/public_kernel.js +1 -1
  35. package/package.json +13 -12
  36. package/dest/sequencer/utils.d.ts +0 -7
  37. package/dest/sequencer/utils.d.ts.map +0 -1
  38. package/dest/sequencer/utils.js +0 -11
@@ -10,7 +10,7 @@ export async function makeProcessedTx(tx, kernelOutput, proof) {
10
10
  return {
11
11
  hash: await tx.getTxHash(),
12
12
  data: kernelOutput ??
13
- new PublicKernelPublicInputs(CombinedAccumulatedData.fromFinalAccumulatedData(tx.data.end), tx.data.constants),
13
+ new PublicKernelPublicInputs(tx.data.aggregationObject, tx.data.metaHwm, CombinedAccumulatedData.fromFinalAccumulatedData(tx.data.end), tx.data.constants),
14
14
  proof: proof ?? tx.proof,
15
15
  encryptedLogs: tx.encryptedLogs,
16
16
  unencryptedLogs: tx.unencryptedLogs,
@@ -22,9 +22,9 @@ export async function makeProcessedTx(tx, kernelOutput, proof) {
22
22
  * Makes an empty tx from an empty kernel circuit public inputs.
23
23
  * @returns A processed empty tx.
24
24
  */
25
- export function makeEmptyProcessedTx(historicalTreeRoots, chainId, version) {
25
+ export function makeEmptyProcessedTx(header, chainId, version) {
26
26
  const emptyKernelOutput = PublicKernelPublicInputs.empty();
27
- emptyKernelOutput.constants.blockHeader = historicalTreeRoots;
27
+ emptyKernelOutput.constants.historicalHeader = header;
28
28
  emptyKernelOutput.constants.txContext.chainId = chainId;
29
29
  emptyKernelOutput.constants.txContext.version = version;
30
30
  const emptyProof = makeEmptyProof();
@@ -39,4 +39,4 @@ export function makeEmptyProcessedTx(historicalTreeRoots, chainId, version) {
39
39
  isEmpty: true,
40
40
  });
41
41
  }
42
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY2Vzc2VkX3R4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcXVlbmNlci9wcm9jZXNzZWRfdHgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG9CQUFvQixFQUFNLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRixPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLEVBQUUsRUFFRix3QkFBd0IsRUFDeEIsY0FBYyxHQUNmLE1BQU0sb0JBQW9CLENBQUM7QUFxRDVCOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxlQUFlLENBQ25DLEVBQU0sRUFDTixZQUF1QyxFQUN2QyxLQUFhO0lBRWIsT0FBTztRQUNMLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxTQUFTLEVBQUU7UUFDMUIsSUFBSSxFQUNGLFlBQVk7WUFDWixJQUFJLHdCQUF3QixDQUFDLHVCQUF1QixDQUFDLHdCQUF3QixDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDaEgsS0FBSyxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUMsS0FBSztRQUN4QixhQUFhLEVBQUUsRUFBRSxDQUFDLGFBQWE7UUFDL0IsZUFBZSxFQUFFLEVBQUUsQ0FBQyxlQUFlO1FBQ25DLFlBQVksRUFBRSxFQUFFLENBQUMsWUFBWTtRQUM3QixPQUFPLEVBQUUsS0FBSztLQUNmLENBQUM7QUFDSixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUFDLG1CQUFnQyxFQUFFLE9BQVcsRUFBRSxPQUFXO0lBQzdGLE1BQU0saUJBQWlCLEdBQUcsd0JBQXdCLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDM0QsaUJBQWlCLENBQUMsU0FBUyxDQUFDLFdBQVcsR0FBRyxtQkFBbUIsQ0FBQztJQUM5RCxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7SUFDeEQsaUJBQWlCLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0lBQ3hELE1BQU0sVUFBVSxHQUFHLGNBQWMsRUFBRSxDQUFDO0lBRXBDLE1BQU0sSUFBSSxHQUFHLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUM1QyxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUM7UUFDckIsSUFBSTtRQUNKLGFBQWEsRUFBRSxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDL0IsZUFBZSxFQUFFLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUNqQyxJQUFJLEVBQUUsaUJBQWlCO1FBQ3ZCLEtBQUssRUFBRSxVQUFVO1FBQ2pCLFlBQVksRUFBRSxDQUFDLG9CQUFvQixDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzVDLE9BQU8sRUFBRSxJQUFJO0tBQ2QsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyJ9
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY2Vzc2VkX3R4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcXVlbmNlci9wcm9jZXNzZWRfdHgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG9CQUFvQixFQUFNLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRixPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLEVBQUUsRUFHRix3QkFBd0IsRUFDeEIsY0FBYyxHQUNmLE1BQU0sb0JBQW9CLENBQUM7QUFtQzVCOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxlQUFlLENBQ25DLEVBQU0sRUFDTixZQUF1QyxFQUN2QyxLQUFhO0lBRWIsT0FBTztRQUNMLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxTQUFTLEVBQUU7UUFDMUIsSUFBSSxFQUNGLFlBQVk7WUFDWixJQUFJLHdCQUF3QixDQUMxQixFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUN6QixFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFDZix1QkFBdUIsQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUM3RCxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FDbEI7UUFDSCxLQUFLLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQyxLQUFLO1FBQ3hCLGFBQWEsRUFBRSxFQUFFLENBQUMsYUFBYTtRQUMvQixlQUFlLEVBQUUsRUFBRSxDQUFDLGVBQWU7UUFDbkMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxZQUFZO1FBQzdCLE9BQU8sRUFBRSxLQUFLO0tBQ2YsQ0FBQztBQUNKLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsb0JBQW9CLENBQUMsTUFBYyxFQUFFLE9BQVcsRUFBRSxPQUFXO0lBQzNFLE1BQU0saUJBQWlCLEdBQUcsd0JBQXdCLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDM0QsaUJBQWlCLENBQUMsU0FBUyxDQUFDLGdCQUFnQixHQUFHLE1BQU0sQ0FBQztJQUN0RCxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7SUFDeEQsaUJBQWlCLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0lBQ3hELE1BQU0sVUFBVSxHQUFHLGNBQWMsRUFBRSxDQUFDO0lBRXBDLE1BQU0sSUFBSSxHQUFHLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUM1QyxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUM7UUFDckIsSUFBSTtRQUNKLGFBQWEsRUFBRSxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDL0IsZUFBZSxFQUFFLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUNqQyxJQUFJLEVBQUUsaUJBQWlCO1FBQ3ZCLEtBQUssRUFBRSxVQUFVO1FBQ2pCLFlBQVksRUFBRSxDQUFDLG9CQUFvQixDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzVDLE9BQU8sRUFBRSxJQUFJO0tBQ2QsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyJ9
@@ -1,6 +1,6 @@
1
- import { PublicExecutionResult, PublicExecutor, PublicStateDB } from '@aztec/acir-simulator';
2
- import { ContractDataSource, FunctionL2Logs, L1ToL2MessageSource, Tx } from '@aztec/circuit-types';
3
- import { BlockHeader, Fr, GlobalVariables, KernelCircuitPublicInputs, PreviousKernelData, Proof, PublicCallData, PublicCallStackItem, PublicCircuitPublicInputs, PublicKernelPublicInputs } from '@aztec/circuits.js';
1
+ import { ContractDataSource, L1ToL2MessageSource, Tx } from '@aztec/circuit-types';
2
+ import { GlobalVariables, Header } from '@aztec/circuits.js';
3
+ import { PublicExecutor, PublicStateDB } from '@aztec/simulator';
4
4
  import { MerkleTreeOperations } from '@aztec/world-state';
5
5
  import { PublicProver } from '../prover/index.js';
6
6
  import { PublicKernelCircuitSimulator } from '../simulator/index.js';
@@ -16,12 +16,12 @@ export declare class PublicProcessorFactory {
16
16
  constructor(merkleTree: MerkleTreeOperations, contractDataSource: ContractDataSource, l1Tol2MessagesDataSource: L1ToL2MessageSource);
17
17
  /**
18
18
  * Creates a new instance of a PublicProcessor.
19
- * @param prevGlobalVariables - The global variables for the previous block, used to calculate the prev global variables hash.
19
+ * @param historicalHeader - The header of a block previous to the one in which the tx is included.
20
20
  * @param globalVariables - The global variables for the block being processed.
21
21
  * @param newContracts - Provides access to contract bytecode for public executions.
22
22
  * @returns A new instance of a PublicProcessor.
23
23
  */
24
- create(prevGlobalVariables: GlobalVariables, globalVariables: GlobalVariables): Promise<PublicProcessor>;
24
+ create(historicalHeader: Header | undefined, globalVariables: GlobalVariables): Promise<PublicProcessor>;
25
25
  }
26
26
  /**
27
27
  * Converts Txs lifted from the P2P module into ProcessedTx objects by executing
@@ -33,11 +33,11 @@ export declare class PublicProcessor {
33
33
  protected publicKernel: PublicKernelCircuitSimulator;
34
34
  protected publicProver: PublicProver;
35
35
  protected globalVariables: GlobalVariables;
36
- protected blockHeader: BlockHeader;
36
+ protected historicalHeader: Header;
37
37
  protected publicContractsDB: ContractsDataSourcePublicDB;
38
38
  protected publicStateDB: PublicStateDB;
39
39
  private log;
40
- constructor(db: MerkleTreeOperations, publicExecutor: PublicExecutor, publicKernel: PublicKernelCircuitSimulator, publicProver: PublicProver, globalVariables: GlobalVariables, blockHeader: BlockHeader, publicContractsDB: ContractsDataSourcePublicDB, publicStateDB: PublicStateDB, log?: import("@aztec/foundation/log").DebugLogger);
40
+ constructor(db: MerkleTreeOperations, publicExecutor: PublicExecutor, publicKernel: PublicKernelCircuitSimulator, publicProver: PublicProver, globalVariables: GlobalVariables, historicalHeader: Header, publicContractsDB: ContractsDataSourcePublicDB, publicStateDB: PublicStateDB, log?: import("@aztec/foundation/log").DebugLogger);
41
41
  /**
42
42
  * Run each tx through the public circuit and the public kernel circuit if needed.
43
43
  * @param txs - Txs to process.
@@ -49,30 +49,5 @@ export declare class PublicProcessor {
49
49
  * @returns A processed tx with empty data.
50
50
  */
51
51
  makeEmptyProcessedTx(): Promise<ProcessedTx>;
52
- protected processTx(tx: Tx): Promise<ProcessedTx>;
53
- protected processEnqueuedPublicCalls(tx: Tx): Promise<[PublicKernelPublicInputs, Proof, FunctionL2Logs[]]>;
54
- protected runKernelCircuit(callData: PublicCallData, previousOutput: KernelCircuitPublicInputs, previousProof: Proof): Promise<[KernelCircuitPublicInputs, Proof]>;
55
- protected getKernelCircuitOutput(callData: PublicCallData, previousOutput: KernelCircuitPublicInputs, previousProof: Proof): Promise<KernelCircuitPublicInputs>;
56
- protected getPreviousKernelData(previousOutput: KernelCircuitPublicInputs, previousProof: Proof): PreviousKernelData;
57
- protected getPublicCircuitPublicInputs(result: PublicExecutionResult): Promise<PublicCircuitPublicInputs>;
58
- protected getPublicCallStackItem(result: PublicExecutionResult, isExecutionRequest?: boolean): Promise<PublicCallStackItem>;
59
- protected getPublicCallStackPreimages(result: PublicExecutionResult): Promise<PublicCallStackItem[]>;
60
- protected getBytecodeHash(_result: PublicExecutionResult): Promise<Fr>;
61
- /**
62
- * Calculates the PublicCircuitOutput for this execution result along with its proof,
63
- * and assembles a PublicCallData object from it.
64
- * @param result - The execution result.
65
- * @param preimages - The preimages of the callstack items.
66
- * @param isExecutionRequest - Whether the current callstack item should be considered a public fn execution request.
67
- * @returns A corresponding PublicCallData object.
68
- */
69
- protected getPublicCallData(result: PublicExecutionResult, isExecutionRequest?: boolean): Promise<PublicCallData>;
70
- /**
71
- * Patch the ordering of storage actions output from the public kernel.
72
- * @param publicInputs - to be patched here: public inputs to the kernel iteration up to this point
73
- * @param execResult - result of the top/first execution for this enqueued public call
74
- */
75
- private patchPublicStorageActionOrdering;
76
- private removeRedundantPublicDataWrites;
77
52
  }
78
53
  //# sourceMappingURL=public_processor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"public_processor.d.ts","sourceRoot":"","sources":["../../src/sequencer/public_processor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"public_processor.d.ts","sourceRoot":"","sources":["../../src/sequencer/public_processor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,EAAE,EAAE,MAAM,sBAAsB,CAAC;AAEnF,OAAO,EAAE,eAAe,EAAE,MAAM,EAAmC,MAAM,oBAAoB,CAAC;AAG9F,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAG1D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,2BAA2B,EAAoC,MAAM,iCAAiC,CAAC;AAIhH,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAyC,MAAM,mBAAmB,CAAC;AAEjG;;GAEG;AACH,qBAAa,sBAAsB;IAE/B,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,wBAAwB;gBAFxB,UAAU,EAAE,oBAAoB,EAChC,kBAAkB,EAAE,kBAAkB,EACtC,wBAAwB,EAAE,mBAAmB;IAGvD;;;;;;OAMG;IACU,MAAM,CACjB,gBAAgB,EAAE,MAAM,GAAG,SAAS,EACpC,eAAe,EAAE,eAAe,GAC/B,OAAO,CAAC,eAAe,CAAC;CAkB5B;AAED;;;GAGG;AACH,qBAAa,eAAe;IAExB,SAAS,CAAC,EAAE,EAAE,oBAAoB;IAClC,SAAS,CAAC,cAAc,EAAE,cAAc;IACxC,SAAS,CAAC,YAAY,EAAE,4BAA4B;IACpD,SAAS,CAAC,YAAY,EAAE,YAAY;IACpC,SAAS,CAAC,eAAe,EAAE,eAAe;IAC1C,SAAS,CAAC,gBAAgB,EAAE,MAAM;IAClC,SAAS,CAAC,iBAAiB,EAAE,2BAA2B;IACxD,SAAS,CAAC,aAAa,EAAE,aAAa;IAEtC,OAAO,CAAC,GAAG;gBATD,EAAE,EAAE,oBAAoB,EACxB,cAAc,EAAE,cAAc,EAC9B,YAAY,EAAE,4BAA4B,EAC1C,YAAY,EAAE,YAAY,EAC1B,eAAe,EAAE,eAAe,EAChC,gBAAgB,EAAE,MAAM,EACxB,iBAAiB,EAAE,2BAA2B,EAC9C,aAAa,EAAE,aAAa,EAE9B,GAAG,8CAAwD;IAGrE;;;;OAIG;IACU,OAAO,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;IA+CrE;;;OAGG;IACI,oBAAoB,IAAI,OAAO,CAAC,WAAW,CAAC;CAIpD"}
@@ -1,17 +1,12 @@
1
- import { PublicExecutor, collectPublicDataReads, collectPublicDataUpdateRequests, isPublicExecutionResult, } from '@aztec/acir-simulator';
2
- import { MerkleTreeId, Tx } from '@aztec/circuit-types';
3
- import { AztecAddress, CallRequest, CombinedAccumulatedData, ContractStorageRead, ContractStorageUpdateRequest, Fr, KernelCircuitPublicInputs, MAX_NEW_COMMITMENTS_PER_CALL, MAX_NEW_L2_TO_L1_MSGS_PER_CALL, MAX_NEW_NULLIFIERS_PER_CALL, MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL, MAX_PUBLIC_DATA_READS_PER_CALL, MAX_PUBLIC_DATA_READS_PER_TX, MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL, MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX, MembershipWitness, PreviousKernelData, PublicCallData, PublicCallStackItem, PublicCircuitPublicInputs, PublicDataRead, PublicDataUpdateRequest, PublicKernelInputs, RETURN_VALUES_LENGTH, SideEffect, SideEffectLinkedToNoteHash, VK_TREE_HEIGHT, } from '@aztec/circuits.js';
4
- import { computeVarArgsHash } from '@aztec/circuits.js/abis';
5
- import { arrayNonEmptyLength, isArrayEmpty, padArrayEnd } from '@aztec/foundation/collection';
1
+ import { Tx } from '@aztec/circuit-types';
6
2
  import { createDebugLogger } from '@aztec/foundation/log';
7
- import { to2Fields } from '@aztec/foundation/serialize';
8
3
  import { Timer } from '@aztec/foundation/timer';
9
- import { getVerificationKeys } from '../mocks/verification_keys.js';
4
+ import { PublicExecutor } from '@aztec/simulator';
10
5
  import { EmptyPublicProver } from '../prover/empty.js';
11
6
  import { ContractsDataSourcePublicDB, WorldStateDB, WorldStatePublicDB } from '../simulator/public_executor.js';
12
7
  import { RealPublicKernelCircuitSimulator } from '../simulator/public_kernel.js';
8
+ import { FeePreparationPhaseManager } from './fee_preparation_phase_manager.js';
13
9
  import { makeEmptyProcessedTx, makeProcessedTx } from './processed_tx.js';
14
- import { getBlockHeader } from './utils.js';
15
10
  /**
16
11
  * Creates new instances of PublicProcessor given the provided merkle tree db and contract data source.
17
12
  */
@@ -23,18 +18,18 @@ export class PublicProcessorFactory {
23
18
  }
24
19
  /**
25
20
  * Creates a new instance of a PublicProcessor.
26
- * @param prevGlobalVariables - The global variables for the previous block, used to calculate the prev global variables hash.
21
+ * @param historicalHeader - The header of a block previous to the one in which the tx is included.
27
22
  * @param globalVariables - The global variables for the block being processed.
28
23
  * @param newContracts - Provides access to contract bytecode for public executions.
29
24
  * @returns A new instance of a PublicProcessor.
30
25
  */
31
- async create(prevGlobalVariables, globalVariables) {
32
- const blockHeader = await getBlockHeader(this.merkleTree, prevGlobalVariables);
26
+ async create(historicalHeader, globalVariables) {
27
+ historicalHeader = historicalHeader ?? (await this.merkleTree.buildInitialHeader());
33
28
  const publicContractsDB = new ContractsDataSourcePublicDB(this.contractDataSource);
34
29
  const worldStatePublicDB = new WorldStatePublicDB(this.merkleTree);
35
30
  const worldStateDB = new WorldStateDB(this.merkleTree, this.l1Tol2MessagesDataSource);
36
- const publicExecutor = new PublicExecutor(worldStatePublicDB, publicContractsDB, worldStateDB, blockHeader);
37
- return new PublicProcessor(this.merkleTree, publicExecutor, new RealPublicKernelCircuitSimulator(), new EmptyPublicProver(), globalVariables, blockHeader, publicContractsDB, worldStatePublicDB);
31
+ const publicExecutor = new PublicExecutor(worldStatePublicDB, publicContractsDB, worldStateDB, historicalHeader);
32
+ return new PublicProcessor(this.merkleTree, publicExecutor, new RealPublicKernelCircuitSimulator(), new EmptyPublicProver(), globalVariables, historicalHeader, publicContractsDB, worldStatePublicDB);
38
33
  }
39
34
  }
40
35
  /**
@@ -42,13 +37,13 @@ export class PublicProcessorFactory {
42
37
  * any public function calls in them. Txs with private calls only are unaffected.
43
38
  */
44
39
  export class PublicProcessor {
45
- constructor(db, publicExecutor, publicKernel, publicProver, globalVariables, blockHeader, publicContractsDB, publicStateDB, log = createDebugLogger('aztec:sequencer:public-processor')) {
40
+ constructor(db, publicExecutor, publicKernel, publicProver, globalVariables, historicalHeader, publicContractsDB, publicStateDB, log = createDebugLogger('aztec:sequencer:public-processor')) {
46
41
  this.db = db;
47
42
  this.publicExecutor = publicExecutor;
48
43
  this.publicKernel = publicKernel;
49
44
  this.publicProver = publicProver;
50
45
  this.globalVariables = globalVariables;
51
- this.blockHeader = blockHeader;
46
+ this.historicalHeader = historicalHeader;
52
47
  this.publicContractsDB = publicContractsDB;
53
48
  this.publicStateDB = publicStateDB;
54
49
  this.log = log;
@@ -64,24 +59,29 @@ export class PublicProcessor {
64
59
  const result = [];
65
60
  const failed = [];
66
61
  for (const tx of txs) {
67
- this.log(`Processing tx ${await tx.getTxHash()}`);
62
+ let phase = new FeePreparationPhaseManager(this.db, this.publicExecutor, this.publicKernel, this.publicProver, this.globalVariables, this.historicalHeader, this.publicContractsDB, this.publicStateDB);
63
+ let publicKernelOutput = undefined;
64
+ let publicKernelProof = undefined;
65
+ const timer = new Timer();
68
66
  try {
69
- // add new contracts to the contracts db so that their functions may be found and called
70
- await this.publicContractsDB.addNewContracts(tx);
71
- result.push(await this.processTx(tx));
72
- // commit the state updates from this transaction
73
- await this.publicStateDB.commit();
67
+ while (phase) {
68
+ const output = await phase.handle(tx, publicKernelOutput, publicKernelProof);
69
+ publicKernelOutput = output.publicKernelOutput;
70
+ publicKernelProof = output.publicKernelProof;
71
+ phase = phase.nextPhase();
72
+ }
73
+ const processedTransaction = await makeProcessedTx(tx, publicKernelOutput, publicKernelProof);
74
+ result.push(processedTransaction);
75
+ this.log(`Processed public part of ${tx.data.end.newNullifiers[0]}`, {
76
+ eventName: 'tx-sequencer-processing',
77
+ duration: timer.ms(),
78
+ publicDataUpdateRequests: processedTransaction.data.end.publicDataUpdateRequests.filter(x => !x.leafSlot.isZero()).length ?? 0,
79
+ ...tx.getStats(),
80
+ });
74
81
  }
75
82
  catch (err) {
76
- this.log.warn(`Error processing tx ${await tx.getTxHash()}: ${err}`);
77
- failed.push({
78
- tx,
79
- error: err instanceof Error ? err : new Error('Unknown error'),
80
- });
81
- // remove contracts on failure
82
- await this.publicContractsDB.removeNewContracts(tx);
83
- // rollback any state updates from this failed transaction
84
- await this.publicStateDB.rollback();
83
+ const failedTx = await phase.rollback(tx, err);
84
+ failed.push(failedTx);
85
85
  }
86
86
  }
87
87
  return [result, failed];
@@ -92,211 +92,7 @@ export class PublicProcessor {
92
92
  */
93
93
  makeEmptyProcessedTx() {
94
94
  const { chainId, version } = this.globalVariables;
95
- return makeEmptyProcessedTx(this.blockHeader, chainId, version);
96
- }
97
- async processTx(tx) {
98
- if (!isArrayEmpty(tx.data.end.publicCallStack, item => item.isEmpty())) {
99
- const timer = new Timer();
100
- const [publicKernelOutput, publicKernelProof, newUnencryptedFunctionLogs] = await this.processEnqueuedPublicCalls(tx);
101
- tx.unencryptedLogs.addFunctionLogs(newUnencryptedFunctionLogs);
102
- const processedTransaction = await makeProcessedTx(tx, publicKernelOutput, publicKernelProof);
103
- this.log(`Processed public part of ${tx.data.end.newNullifiers[0]}`, {
104
- eventName: 'tx-sequencer-processing',
105
- duration: timer.ms(),
106
- publicDataUpdateRequests: processedTransaction.data.end.publicDataUpdateRequests.filter(x => !x.leafSlot.isZero()).length ?? 0,
107
- ...tx.getStats(),
108
- });
109
- return processedTransaction;
110
- }
111
- else {
112
- return makeProcessedTx(tx);
113
- }
114
- }
115
- async processEnqueuedPublicCalls(tx) {
116
- this.log(`Executing enqueued public calls for tx ${await tx.getTxHash()}`);
117
- if (!tx.enqueuedPublicFunctionCalls) {
118
- throw new Error(`Missing preimages for enqueued public calls`);
119
- }
120
- let kernelOutput = new KernelCircuitPublicInputs(CombinedAccumulatedData.fromFinalAccumulatedData(tx.data.end), tx.data.constants, tx.data.isPrivate);
121
- let kernelProof = tx.proof;
122
- const newUnencryptedFunctionLogs = [];
123
- // TODO(#1684): Should multiple separately enqueued public calls be treated as
124
- // separate public callstacks to be proven by separate public kernel sequences
125
- // and submitted separately to the base rollup?
126
- // TODO(dbanks12): why must these be reversed?
127
- const enqueuedCallsReversed = tx.enqueuedPublicFunctionCalls.slice().reverse();
128
- for (const enqueuedCall of enqueuedCallsReversed) {
129
- const executionStack = [enqueuedCall];
130
- // Keep track of which result is for the top/enqueued call
131
- let enqueuedExecutionResult;
132
- while (executionStack.length) {
133
- const current = executionStack.pop();
134
- const isExecutionRequest = !isPublicExecutionResult(current);
135
- const result = isExecutionRequest ? await this.publicExecutor.simulate(current, this.globalVariables) : current;
136
- newUnencryptedFunctionLogs.push(result.unencryptedLogs);
137
- const functionSelector = result.execution.functionData.selector.toString();
138
- this.log(`Running public kernel circuit for ${functionSelector}@${result.execution.contractAddress.toString()}`);
139
- executionStack.push(...result.nestedExecutions);
140
- const callData = await this.getPublicCallData(result, isExecutionRequest);
141
- [kernelOutput, kernelProof] = await this.runKernelCircuit(callData, kernelOutput, kernelProof);
142
- if (!enqueuedExecutionResult) {
143
- enqueuedExecutionResult = result;
144
- }
145
- }
146
- // HACK(#1622): Manually patches the ordering of public state actions
147
- // TODO(#757): Enforce proper ordering of public state actions
148
- this.patchPublicStorageActionOrdering(kernelOutput, enqueuedExecutionResult);
149
- }
150
- // TODO(#3675): This should be done in a public kernel circuit
151
- this.removeRedundantPublicDataWrites(kernelOutput);
152
- return [kernelOutput, kernelProof, newUnencryptedFunctionLogs];
153
- }
154
- async runKernelCircuit(callData, previousOutput, previousProof) {
155
- const output = await this.getKernelCircuitOutput(callData, previousOutput, previousProof);
156
- const proof = await this.publicProver.getPublicKernelCircuitProof(output);
157
- return [output, proof];
158
- }
159
- getKernelCircuitOutput(callData, previousOutput, previousProof) {
160
- if (previousOutput?.isPrivate && previousProof) {
161
- // Run the public kernel circuit with previous private kernel
162
- const previousKernel = this.getPreviousKernelData(previousOutput, previousProof);
163
- const inputs = new PublicKernelInputs(previousKernel, callData);
164
- return this.publicKernel.publicKernelCircuitPrivateInput(inputs);
165
- }
166
- else if (previousOutput && previousProof) {
167
- // Run the public kernel circuit with previous public kernel
168
- const previousKernel = this.getPreviousKernelData(previousOutput, previousProof);
169
- const inputs = new PublicKernelInputs(previousKernel, callData);
170
- return this.publicKernel.publicKernelCircuitNonFirstIteration(inputs);
171
- }
172
- else {
173
- throw new Error(`No public kernel circuit for inputs`);
174
- }
175
- }
176
- getPreviousKernelData(previousOutput, previousProof) {
177
- const vk = getVerificationKeys().publicKernelCircuit;
178
- const vkIndex = 0;
179
- const vkSiblingPath = MembershipWitness.random(VK_TREE_HEIGHT).siblingPath;
180
- return new PreviousKernelData(previousOutput, previousProof, vk, vkIndex, vkSiblingPath);
181
- }
182
- async getPublicCircuitPublicInputs(result) {
183
- const publicDataTreeInfo = await this.db.getTreeInfo(MerkleTreeId.PUBLIC_DATA_TREE);
184
- this.blockHeader.publicDataTreeRoot = Fr.fromBuffer(publicDataTreeInfo.root);
185
- const callStackPreimages = await this.getPublicCallStackPreimages(result);
186
- const publicCallStackHashes = padArrayEnd(callStackPreimages.map(c => c.hash()), Fr.ZERO, MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL);
187
- // TODO(https://github.com/AztecProtocol/aztec-packages/issues/1165) --> set this in Noir
188
- const unencryptedLogsHash = to2Fields(result.unencryptedLogs.hash());
189
- const unencryptedLogPreimagesLength = new Fr(result.unencryptedLogs.getSerializedLength());
190
- return PublicCircuitPublicInputs.from({
191
- callContext: result.execution.callContext,
192
- proverAddress: AztecAddress.ZERO,
193
- argsHash: computeVarArgsHash(result.execution.args),
194
- newCommitments: padArrayEnd(result.newCommitments, SideEffect.empty(), MAX_NEW_COMMITMENTS_PER_CALL),
195
- newNullifiers: padArrayEnd(result.newNullifiers, SideEffectLinkedToNoteHash.empty(), MAX_NEW_NULLIFIERS_PER_CALL),
196
- newL2ToL1Msgs: padArrayEnd(result.newL2ToL1Messages, Fr.ZERO, MAX_NEW_L2_TO_L1_MSGS_PER_CALL),
197
- returnValues: padArrayEnd(result.returnValues, Fr.ZERO, RETURN_VALUES_LENGTH),
198
- contractStorageReads: padArrayEnd(result.contractStorageReads, ContractStorageRead.empty(), MAX_PUBLIC_DATA_READS_PER_CALL),
199
- contractStorageUpdateRequests: padArrayEnd(result.contractStorageUpdateRequests, ContractStorageUpdateRequest.empty(), MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_CALL),
200
- publicCallStackHashes,
201
- unencryptedLogsHash,
202
- unencryptedLogPreimagesLength,
203
- blockHeader: this.blockHeader,
204
- });
205
- }
206
- async getPublicCallStackItem(result, isExecutionRequest = false) {
207
- return new PublicCallStackItem(result.execution.contractAddress, result.execution.functionData, await this.getPublicCircuitPublicInputs(result), isExecutionRequest);
208
- }
209
- async getPublicCallStackPreimages(result) {
210
- const nested = result.nestedExecutions;
211
- if (nested.length > MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL) {
212
- throw new Error(`Public call stack size exceeded (max ${MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL}, got ${nested.length})`);
213
- }
214
- return await Promise.all(nested.map(n => this.getPublicCallStackItem(n)));
215
- }
216
- getBytecodeHash(_result) {
217
- // TODO: Determine how to calculate bytecode hash. Circuits just check it isn't zero for now.
218
- // See https://github.com/AztecProtocol/aztec3-packages/issues/378
219
- const bytecodeHash = new Fr(1n);
220
- return Promise.resolve(bytecodeHash);
221
- }
222
- /**
223
- * Calculates the PublicCircuitOutput for this execution result along with its proof,
224
- * and assembles a PublicCallData object from it.
225
- * @param result - The execution result.
226
- * @param preimages - The preimages of the callstack items.
227
- * @param isExecutionRequest - Whether the current callstack item should be considered a public fn execution request.
228
- * @returns A corresponding PublicCallData object.
229
- */
230
- async getPublicCallData(result, isExecutionRequest = false) {
231
- const bytecodeHash = await this.getBytecodeHash(result);
232
- const callStackItem = await this.getPublicCallStackItem(result, isExecutionRequest);
233
- const publicCallRequests = (await this.getPublicCallStackPreimages(result)).map(c => c.toCallRequest());
234
- const publicCallStack = padArrayEnd(publicCallRequests, CallRequest.empty(), MAX_PUBLIC_CALL_STACK_LENGTH_PER_CALL);
235
- const portalContractAddress = result.execution.callContext.portalContractAddress.toField();
236
- const proof = await this.publicProver.getPublicCircuitProof(callStackItem.publicInputs);
237
- return new PublicCallData(callStackItem, publicCallStack, proof, portalContractAddress, bytecodeHash);
238
- }
239
- // HACK(#1622): this is a hack to fix ordering of public state in the call stack. Since the private kernel
240
- // cannot keep track of side effects that happen after or before a nested call, we override the public
241
- // state actions it emits with whatever we got from the simulator. As a sanity check, we at least verify
242
- // that the elements are the same, so we are only tweaking their ordering.
243
- // See yarn-project/end-to-end/src/e2e_ordering.test.ts
244
- // See https://github.com/AztecProtocol/aztec-packages/issues/1616
245
- // TODO(#757): Enforce proper ordering of public state actions
246
- /**
247
- * Patch the ordering of storage actions output from the public kernel.
248
- * @param publicInputs - to be patched here: public inputs to the kernel iteration up to this point
249
- * @param execResult - result of the top/first execution for this enqueued public call
250
- */
251
- patchPublicStorageActionOrdering(publicInputs, execResult) {
252
- // Convert ContractStorage* objects to PublicData* objects and sort them in execution order
253
- const simPublicDataReads = collectPublicDataReads(execResult);
254
- const simPublicDataUpdateRequests = collectPublicDataUpdateRequests(execResult);
255
- const { publicDataReads, publicDataUpdateRequests } = publicInputs.end; // from kernel
256
- // Validate all items in enqueued public calls are in the kernel emitted stack
257
- const readsAreEqual = simPublicDataReads.reduce((accum, read) => accum && !!publicDataReads.find(item => item.leafSlot.equals(read.leafSlot) && item.value.equals(read.value)), true);
258
- const updatesAreEqual = simPublicDataUpdateRequests.reduce((accum, update) => accum &&
259
- !!publicDataUpdateRequests.find(item => item.leafSlot.equals(update.leafSlot) &&
260
- item.oldValue.equals(update.oldValue) &&
261
- item.newValue.equals(update.newValue)), true);
262
- if (!readsAreEqual) {
263
- throw new Error(`Public data reads from simulator do not match those from public kernel.\nFrom simulator: ${simPublicDataReads
264
- .map(p => p.toFriendlyJSON())
265
- .join(', ')}\nFrom public kernel: ${publicDataReads.map(i => i.toFriendlyJSON()).join(', ')}`);
266
- }
267
- if (!updatesAreEqual) {
268
- throw new Error(`Public data update requests from simulator do not match those from public kernel.\nFrom simulator: ${simPublicDataUpdateRequests
269
- .map(p => p.toFriendlyJSON())
270
- .join(', ')}\nFrom public kernel: ${publicDataUpdateRequests.map(i => i.toFriendlyJSON()).join(', ')}`);
271
- }
272
- // Assume that kernel public inputs has the right number of items.
273
- // We only want to reorder the items from the public inputs of the
274
- // most recently processed top/enqueued call.
275
- const numTotalReadsInKernel = arrayNonEmptyLength(publicInputs.end.publicDataReads, f => f.leafSlot.equals(Fr.ZERO) && f.value.equals(Fr.ZERO));
276
- const numTotalUpdatesInKernel = arrayNonEmptyLength(publicInputs.end.publicDataUpdateRequests, f => f.leafSlot.equals(Fr.ZERO) && f.oldValue.equals(Fr.ZERO) && f.newValue.equals(Fr.ZERO));
277
- const numReadsBeforeThisEnqueuedCall = numTotalReadsInKernel - simPublicDataReads.length;
278
- const numUpdatesBeforeThisEnqueuedCall = numTotalUpdatesInKernel - simPublicDataUpdateRequests.length;
279
- // Override kernel output
280
- publicInputs.end.publicDataReads = padArrayEnd([
281
- // do not mess with items from previous top/enqueued calls in kernel output
282
- ...publicDataReads.slice(0, numReadsBeforeThisEnqueuedCall),
283
- ...simPublicDataReads,
284
- ], PublicDataRead.empty(), MAX_PUBLIC_DATA_READS_PER_TX);
285
- // Override kernel output
286
- publicInputs.end.publicDataUpdateRequests = padArrayEnd([
287
- // do not mess with items from previous top/enqueued calls in kernel output
288
- ...publicDataUpdateRequests.slice(0, numUpdatesBeforeThisEnqueuedCall),
289
- ...simPublicDataUpdateRequests,
290
- ], PublicDataUpdateRequest.empty(), MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX);
291
- }
292
- removeRedundantPublicDataWrites(publicInputs) {
293
- const lastWritesMap = new Map();
294
- for (const write of publicInputs.end.publicDataUpdateRequests) {
295
- const key = write.leafSlot.toString();
296
- lastWritesMap.set(key, write);
297
- }
298
- const lastWrites = publicInputs.end.publicDataUpdateRequests.filter(write => lastWritesMap.get(write.leafSlot.toString()) === write);
299
- publicInputs.end.publicDataUpdateRequests = padArrayEnd(lastWrites, PublicDataUpdateRequest.empty(), MAX_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX);
95
+ return makeEmptyProcessedTx(this.historicalHeader, chainId, version);
300
96
  }
301
97
  }
302
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX3Byb2Nlc3Nvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXF1ZW5jZXIvcHVibGljX3Byb2Nlc3Nvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0wsY0FBYyxFQUVkLHNCQUFzQixFQUN0QiwrQkFBK0IsRUFDL0IsdUJBQXVCLEdBQ3hCLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUEyRCxZQUFZLEVBQUUsRUFBRSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFakgsT0FBTyxFQUNMLFlBQVksRUFFWixXQUFXLEVBQ1gsdUJBQXVCLEVBQ3ZCLG1CQUFtQixFQUNuQiw0QkFBNEIsRUFDNUIsRUFBRSxFQUVGLHlCQUF5QixFQUN6Qiw0QkFBNEIsRUFDNUIsOEJBQThCLEVBQzlCLDJCQUEyQixFQUMzQixxQ0FBcUMsRUFDckMsOEJBQThCLEVBQzlCLDRCQUE0QixFQUM1Qix3Q0FBd0MsRUFDeEMsc0NBQXNDLEVBQ3RDLGlCQUFpQixFQUNqQixrQkFBa0IsRUFFbEIsY0FBYyxFQUNkLG1CQUFtQixFQUNuQix5QkFBeUIsRUFDekIsY0FBYyxFQUNkLHVCQUF1QixFQUN2QixrQkFBa0IsRUFFbEIsb0JBQW9CLEVBQ3BCLFVBQVUsRUFDViwwQkFBMEIsRUFDMUIsY0FBYyxHQUNmLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM5RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDeEQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBR2hELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBR3ZELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxZQUFZLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNoSCxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNqRixPQUFPLEVBQXlCLG9CQUFvQixFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2pHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFNUM7O0dBRUc7QUFDSCxNQUFNLE9BQU8sc0JBQXNCO0lBQ2pDLFlBQ1UsVUFBZ0MsRUFDaEMsa0JBQXNDLEVBQ3RDLHdCQUE2QztRQUY3QyxlQUFVLEdBQVYsVUFBVSxDQUFzQjtRQUNoQyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3RDLDZCQUF3QixHQUF4Qix3QkFBd0IsQ0FBcUI7SUFDcEQsQ0FBQztJQUVKOzs7Ozs7T0FNRztJQUNJLEtBQUssQ0FBQyxNQUFNLENBQ2pCLG1CQUFvQyxFQUNwQyxlQUFnQztRQUVoQyxNQUFNLFdBQVcsR0FBRyxNQUFNLGNBQWMsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLG1CQUFtQixDQUFDLENBQUM7UUFDL0UsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLDJCQUEyQixDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ25GLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbkUsTUFBTSxZQUFZLEdBQUcsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQUN0RixNQUFNLGNBQWMsR0FBRyxJQUFJLGNBQWMsQ0FBQyxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxZQUFZLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDNUcsT0FBTyxJQUFJLGVBQWUsQ0FDeEIsSUFBSSxDQUFDLFVBQVUsRUFDZixjQUFjLEVBQ2QsSUFBSSxnQ0FBZ0MsRUFBRSxFQUN0QyxJQUFJLGlCQUFpQixFQUFFLEVBQ3ZCLGVBQWUsRUFDZixXQUFXLEVBQ1gsaUJBQWlCLEVBQ2pCLGtCQUFrQixDQUNuQixDQUFDO0lBQ0osQ0FBQztDQUNGO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLGVBQWU7SUFDMUIsWUFDWSxFQUF3QixFQUN4QixjQUE4QixFQUM5QixZQUEwQyxFQUMxQyxZQUEwQixFQUMxQixlQUFnQyxFQUNoQyxXQUF3QixFQUN4QixpQkFBOEMsRUFDOUMsYUFBNEIsRUFFOUIsTUFBTSxpQkFBaUIsQ0FBQyxrQ0FBa0MsQ0FBQztRQVR6RCxPQUFFLEdBQUYsRUFBRSxDQUFzQjtRQUN4QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsaUJBQVksR0FBWixZQUFZLENBQThCO1FBQzFDLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQTZCO1FBQzlDLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBRTlCLFFBQUcsR0FBSCxHQUFHLENBQXdEO0lBQ2xFLENBQUM7SUFFSjs7OztPQUlHO0lBQ0ksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFTO1FBQzVCLDRFQUE0RTtRQUM1RSxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNsQyxNQUFNLE1BQU0sR0FBa0IsRUFBRSxDQUFDO1FBQ2pDLE1BQU0sTUFBTSxHQUFlLEVBQUUsQ0FBQztRQUU5QixLQUFLLE1BQU0sRUFBRSxJQUFJLEdBQUcsRUFBRTtZQUNwQixJQUFJLENBQUMsR0FBRyxDQUFDLGlCQUFpQixNQUFNLEVBQUUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDbEQsSUFBSTtnQkFDRix3RkFBd0Y7Z0JBQ3hGLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDakQsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDdEMsaURBQWlEO2dCQUNqRCxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUM7YUFDbkM7WUFBQyxPQUFPLEdBQUcsRUFBRTtnQkFDWixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsTUFBTSxFQUFFLENBQUMsU0FBUyxFQUFFLEtBQUssR0FBRyxFQUFFLENBQUMsQ0FBQztnQkFDckUsTUFBTSxDQUFDLElBQUksQ0FBQztvQkFDVixFQUFFO29CQUNGLEtBQUssRUFBRSxHQUFHLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQztpQkFDL0QsQ0FBQyxDQUFDO2dCQUNILDhCQUE4QjtnQkFDOUIsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3BELDBEQUEwRDtnQkFDMUQsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDO2FBQ3JDO1NBQ0Y7UUFFRCxPQUFPLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRDs7O09BR0c7SUFDSSxvQkFBb0I7UUFDekIsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO1FBQ2xELE9BQU8sb0JBQW9CLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVTLEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBTTtRQUM5QixJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFO1lBQ3RFLE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7WUFFMUIsTUFBTSxDQUFDLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLDBCQUEwQixDQUFDLEdBQUcsTUFBTSxJQUFJLENBQUMsMEJBQTBCLENBQy9HLEVBQUUsQ0FDSCxDQUFDO1lBQ0YsRUFBRSxDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQUMsMEJBQTBCLENBQUMsQ0FBQztZQUUvRCxNQUFNLG9CQUFvQixHQUFHLE1BQU0sZUFBZSxDQUFDLEVBQUUsRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1lBQzlGLElBQUksQ0FBQyxHQUFHLENBQUMsNEJBQTRCLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUNuRSxTQUFTLEVBQUUseUJBQXlCO2dCQUNwQyxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRTtnQkFDcEIsd0JBQXdCLEVBQ3RCLG9CQUFvQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsd0JBQXdCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUM7Z0JBQ3RHLEdBQUcsRUFBRSxDQUFDLFFBQVEsRUFBRTthQUNvQixDQUFDLENBQUM7WUFFeEMsT0FBTyxvQkFBb0IsQ0FBQztTQUM3QjthQUFNO1lBQ0wsT0FBTyxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDNUI7SUFDSCxDQUFDO0lBRVMsS0FBSyxDQUFDLDBCQUEwQixDQUFDLEVBQU07UUFDL0MsSUFBSSxDQUFDLEdBQUcsQ0FBQywwQ0FBMEMsTUFBTSxFQUFFLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzNFLElBQUksQ0FBQyxFQUFFLENBQUMsMkJBQTJCLEVBQUU7WUFDbkMsTUFBTSxJQUFJLEtBQUssQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDO1NBQ2hFO1FBRUQsSUFBSSxZQUFZLEdBQUcsSUFBSSx5QkFBeUIsQ0FDOUMsdUJBQXVCLENBQUMsd0JBQXdCLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFDN0QsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQ2pCLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUNsQixDQUFDO1FBQ0YsSUFBSSxXQUFXLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQztRQUMzQixNQUFNLDBCQUEwQixHQUFxQixFQUFFLENBQUM7UUFFeEQsOEVBQThFO1FBQzlFLDhFQUE4RTtRQUM5RSwrQ0FBK0M7UUFFL0MsOENBQThDO1FBQzlDLE1BQU0scUJBQXFCLEdBQUcsRUFBRSxDQUFDLDJCQUEyQixDQUFDLEtBQUssRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQy9FLEtBQUssTUFBTSxZQUFZLElBQUkscUJBQXFCLEVBQUU7WUFDaEQsTUFBTSxjQUFjLEdBQWdELENBQUMsWUFBWSxDQUFDLENBQUM7WUFFbkYsMERBQTBEO1lBQzFELElBQUksdUJBQTBELENBQUM7WUFFL0QsT0FBTyxjQUFjLENBQUMsTUFBTSxFQUFFO2dCQUM1QixNQUFNLE9BQU8sR0FBRyxjQUFjLENBQUMsR0FBRyxFQUFHLENBQUM7Z0JBQ3RDLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyx1QkFBdUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDN0QsTUFBTSxNQUFNLEdBQUcsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO2dCQUNoSCwwQkFBMEIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO2dCQUN4RCxNQUFNLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDM0UsSUFBSSxDQUFDLEdBQUcsQ0FDTixxQ0FBcUMsZ0JBQWdCLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FDdkcsQ0FBQztnQkFDRixjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7Z0JBQ2hELE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO2dCQUUxRSxDQUFDLFlBQVksRUFBRSxXQUFXLENBQUMsR0FBRyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsWUFBWSxFQUFFLFdBQVcsQ0FBQyxDQUFDO2dCQUUvRixJQUFJLENBQUMsdUJBQXVCLEVBQUU7b0JBQzVCLHVCQUF1QixHQUFHLE1BQU0sQ0FBQztpQkFDbEM7YUFDRjtZQUNELHFFQUFxRTtZQUNyRSw4REFBOEQ7WUFDOUQsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLFlBQVksRUFBRSx1QkFBd0IsQ0FBQyxDQUFDO1NBQy9FO1FBRUQsOERBQThEO1FBQzlELElBQUksQ0FBQywrQkFBK0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUVuRCxPQUFPLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSwwQkFBMEIsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFUyxLQUFLLENBQUMsZ0JBQWdCLENBQzlCLFFBQXdCLEVBQ3hCLGNBQXlDLEVBQ3pDLGFBQW9CO1FBRXBCLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsRUFBRSxjQUFjLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDMUYsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLDJCQUEyQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzFFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVTLHNCQUFzQixDQUM5QixRQUF3QixFQUN4QixjQUF5QyxFQUN6QyxhQUFvQjtRQUVwQixJQUFJLGNBQWMsRUFBRSxTQUFTLElBQUksYUFBYSxFQUFFO1lBQzlDLDZEQUE2RDtZQUM3RCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsY0FBYyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1lBQ2pGLE1BQU0sTUFBTSxHQUFHLElBQUksa0JBQWtCLENBQUMsY0FBYyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ2hFLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQywrQkFBK0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNsRTthQUFNLElBQUksY0FBYyxJQUFJLGFBQWEsRUFBRTtZQUMxQyw0REFBNEQ7WUFDNUQsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGNBQWMsRUFBRSxhQUFhLENBQUMsQ0FBQztZQUNqRixNQUFNLE1BQU0sR0FBRyxJQUFJLGtCQUFrQixDQUFDLGNBQWMsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUNoRSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsb0NBQW9DLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDdkU7YUFBTTtZQUNMLE1BQU0sSUFBSSxLQUFLLENBQUMscUNBQXFDLENBQUMsQ0FBQztTQUN4RDtJQUNILENBQUM7SUFFUyxxQkFBcUIsQ0FBQyxjQUF5QyxFQUFFLGFBQW9CO1FBQzdGLE1BQU0sRUFBRSxHQUFHLG1CQUFtQixFQUFFLENBQUMsbUJBQW1CLENBQUM7UUFDckQsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLE1BQU0sYUFBYSxHQUFHLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxXQUFXLENBQUM7UUFDM0UsT0FBTyxJQUFJLGtCQUFrQixDQUFDLGNBQWMsRUFBRSxhQUFhLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxhQUFhLENBQUMsQ0FBQztJQUMzRixDQUFDO0lBRVMsS0FBSyxDQUFDLDRCQUE0QixDQUFDLE1BQTZCO1FBQ3hFLE1BQU0sa0JBQWtCLEdBQUcsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNwRixJQUFJLENBQUMsV0FBVyxDQUFDLGtCQUFrQixHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFN0UsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMxRSxNQUFNLHFCQUFxQixHQUFHLFdBQVcsQ0FDdkMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQ3JDLEVBQUUsQ0FBQyxJQUFJLEVBQ1AscUNBQXFDLENBQ3RDLENBQUM7UUFFRix5RkFBeUY7UUFDekYsTUFBTSxtQkFBbUIsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3JFLE1BQU0sNkJBQTZCLEdBQUcsSUFBSSxFQUFFLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLENBQUM7UUFFM0YsT0FBTyx5QkFBeUIsQ0FBQyxJQUFJLENBQUM7WUFDcEMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsV0FBVztZQUN6QyxhQUFhLEVBQUUsWUFBWSxDQUFDLElBQUk7WUFDaEMsUUFBUSxFQUFFLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO1lBQ25ELGNBQWMsRUFBRSxXQUFXLENBQUMsTUFBTSxDQUFDLGNBQWMsRUFBRSxVQUFVLENBQUMsS0FBSyxFQUFFLEVBQUUsNEJBQTRCLENBQUM7WUFDcEcsYUFBYSxFQUFFLFdBQVcsQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLDBCQUEwQixDQUFDLEtBQUssRUFBRSxFQUFFLDJCQUEyQixDQUFDO1lBQ2pILGFBQWEsRUFBRSxXQUFXLENBQUMsTUFBTSxDQUFDLGlCQUFpQixFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsOEJBQThCLENBQUM7WUFDN0YsWUFBWSxFQUFFLFdBQVcsQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsb0JBQW9CLENBQUM7WUFDN0Usb0JBQW9CLEVBQUUsV0FBVyxDQUMvQixNQUFNLENBQUMsb0JBQW9CLEVBQzNCLG1CQUFtQixDQUFDLEtBQUssRUFBRSxFQUMzQiw4QkFBOEIsQ0FDL0I7WUFDRCw2QkFBNkIsRUFBRSxXQUFXLENBQ3hDLE1BQU0sQ0FBQyw2QkFBNkIsRUFDcEMsNEJBQTRCLENBQUMsS0FBSyxFQUFFLEVBQ3BDLHdDQUF3QyxDQUN6QztZQUNELHFCQUFxQjtZQUNyQixtQkFBbUI7WUFDbkIsNkJBQTZCO1lBQzdCLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztTQUM5QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRVMsS0FBSyxDQUFDLHNCQUFzQixDQUFDLE1BQTZCLEVBQUUsa0JBQWtCLEdBQUcsS0FBSztRQUM5RixPQUFPLElBQUksbUJBQW1CLENBQzVCLE1BQU0sQ0FBQyxTQUFTLENBQUMsZUFBZSxFQUNoQyxNQUFNLENBQUMsU0FBUyxDQUFDLFlBQVksRUFDN0IsTUFBTSxJQUFJLENBQUMsNEJBQTRCLENBQUMsTUFBTSxDQUFDLEVBQy9DLGtCQUFrQixDQUNuQixDQUFDO0lBQ0osQ0FBQztJQUVTLEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxNQUE2QjtRQUN2RSxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUM7UUFDdkMsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLHFDQUFxQyxFQUFFO1lBQ3pELE1BQU0sSUFBSSxLQUFLLENBQ2Isd0NBQXdDLHFDQUFxQyxTQUFTLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FDdkcsQ0FBQztTQUNIO1FBRUQsT0FBTyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUVTLGVBQWUsQ0FBQyxPQUE4QjtRQUN0RCw2RkFBNkY7UUFDN0Ysa0VBQWtFO1FBQ2xFLE1BQU0sWUFBWSxHQUFHLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hDLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNPLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxNQUE2QixFQUFFLGtCQUFrQixHQUFHLEtBQUs7UUFDekYsTUFBTSxZQUFZLEdBQUcsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3hELE1BQU0sYUFBYSxHQUFHLE1BQU0sSUFBSSxDQUFDLHNCQUFzQixDQUFDLE1BQU0sRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3BGLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO1FBQ3hHLE1BQU0sZUFBZSxHQUFHLFdBQVcsQ0FBQyxrQkFBa0IsRUFBRSxXQUFXLENBQUMsS0FBSyxFQUFFLEVBQUUscUNBQXFDLENBQUMsQ0FBQztRQUNwSCxNQUFNLHFCQUFxQixHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLHFCQUFxQixDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzNGLE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxxQkFBcUIsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDeEYsT0FBTyxJQUFJLGNBQWMsQ0FBQyxhQUFhLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxxQkFBcUIsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUN4RyxDQUFDO0lBRUQsMEdBQTBHO0lBQzFHLHNHQUFzRztJQUN0Ryx3R0FBd0c7SUFDeEcsMEVBQTBFO0lBQzFFLHVEQUF1RDtJQUN2RCxrRUFBa0U7SUFDbEUsOERBQThEO0lBQzlEOzs7O09BSUc7SUFDSyxnQ0FBZ0MsQ0FBQyxZQUF1QyxFQUFFLFVBQWlDO1FBQ2pILDJGQUEyRjtRQUMzRixNQUFNLGtCQUFrQixHQUFHLHNCQUFzQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzlELE1BQU0sMkJBQTJCLEdBQUcsK0JBQStCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFaEYsTUFBTSxFQUFFLGVBQWUsRUFBRSx3QkFBd0IsRUFBRSxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxjQUFjO1FBRXRGLDhFQUE4RTtRQUM5RSxNQUFNLGFBQWEsR0FBRyxrQkFBa0IsQ0FBQyxNQUFNLENBQzdDLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFLENBQ2QsS0FBSyxJQUFJLENBQUMsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUMvRyxJQUFJLENBQ0wsQ0FBQztRQUNGLE1BQU0sZUFBZSxHQUFHLDJCQUEyQixDQUFDLE1BQU0sQ0FDeEQsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FDaEIsS0FBSztZQUNMLENBQUMsQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQzdCLElBQUksQ0FBQyxFQUFFLENBQ0wsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztnQkFDckMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztnQkFDckMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUN4QyxFQUNILElBQUksQ0FDTCxDQUFDO1FBRUYsSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUNsQixNQUFNLElBQUksS0FBSyxDQUNiLDRGQUE0RixrQkFBa0I7aUJBQzNHLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztpQkFDNUIsSUFBSSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUNoRyxDQUFDO1NBQ0g7UUFDRCxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3BCLE1BQU0sSUFBSSxLQUFLLENBQ2Isc0dBQXNHLDJCQUEyQjtpQkFDOUgsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO2lCQUM1QixJQUFJLENBQUMsSUFBSSxDQUFDLHlCQUF5Qix3QkFBd0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FDekcsQ0FBQztTQUNIO1FBRUQsa0VBQWtFO1FBQ2xFLGtFQUFrRTtRQUNsRSw2Q0FBNkM7UUFDN0MsTUFBTSxxQkFBcUIsR0FBRyxtQkFBbUIsQ0FDL0MsWUFBWSxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQ2hDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FDM0QsQ0FBQztRQUNGLE1BQU0sdUJBQXVCLEdBQUcsbUJBQW1CLENBQ2pELFlBQVksQ0FBQyxHQUFHLENBQUMsd0JBQXdCLEVBQ3pDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQzVGLENBQUM7UUFDRixNQUFNLDhCQUE4QixHQUFHLHFCQUFxQixHQUFHLGtCQUFrQixDQUFDLE1BQU0sQ0FBQztRQUN6RixNQUFNLGdDQUFnQyxHQUFHLHVCQUF1QixHQUFHLDJCQUEyQixDQUFDLE1BQU0sQ0FBQztRQUV0Ryx5QkFBeUI7UUFDekIsWUFBWSxDQUFDLEdBQUcsQ0FBQyxlQUFlLEdBQUcsV0FBVyxDQUM1QztZQUNFLDJFQUEyRTtZQUMzRSxHQUFHLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLDhCQUE4QixDQUFDO1lBQzNELEdBQUcsa0JBQWtCO1NBQ3RCLEVBQ0QsY0FBYyxDQUFDLEtBQUssRUFBRSxFQUN0Qiw0QkFBNEIsQ0FDN0IsQ0FBQztRQUVGLHlCQUF5QjtRQUN6QixZQUFZLENBQUMsR0FBRyxDQUFDLHdCQUF3QixHQUFHLFdBQVcsQ0FDckQ7WUFDRSwyRUFBMkU7WUFDM0UsR0FBRyx3QkFBd0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLGdDQUFnQyxDQUFDO1lBQ3RFLEdBQUcsMkJBQTJCO1NBQy9CLEVBQ0QsdUJBQXVCLENBQUMsS0FBSyxFQUFFLEVBQy9CLHNDQUFzQyxDQUN2QyxDQUFDO0lBQ0osQ0FBQztJQUVPLCtCQUErQixDQUFDLFlBQXVDO1FBQzdFLE1BQU0sYUFBYSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7UUFDaEMsS0FBSyxNQUFNLEtBQUssSUFBSSxZQUFZLENBQUMsR0FBRyxDQUFDLHdCQUF3QixFQUFFO1lBQzdELE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDdEMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDL0I7UUFFRCxNQUFNLFVBQVUsR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLHdCQUF3QixDQUFDLE1BQU0sQ0FDakUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUMsS0FBSyxLQUFLLENBQ2hFLENBQUM7UUFFRixZQUFZLENBQUMsR0FBRyxDQUFDLHdCQUF3QixHQUFHLFdBQVcsQ0FDckQsVUFBVSxFQUNWLHVCQUF1QixDQUFDLEtBQUssRUFBRSxFQUMvQixzQ0FBc0MsQ0FDdkMsQ0FBQztJQUNKLENBQUM7Q0FDRiJ9
98
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX3Byb2Nlc3Nvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXF1ZW5jZXIvcHVibGljX3Byb2Nlc3Nvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQTJDLEVBQUUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBR25GLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzFELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsY0FBYyxFQUFpQixNQUFNLGtCQUFrQixDQUFDO0FBR2pFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBR3ZELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxZQUFZLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNoSCxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUVqRixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNoRixPQUFPLEVBQXlCLG9CQUFvQixFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRWpHOztHQUVHO0FBQ0gsTUFBTSxPQUFPLHNCQUFzQjtJQUNqQyxZQUNVLFVBQWdDLEVBQ2hDLGtCQUFzQyxFQUN0Qyx3QkFBNkM7UUFGN0MsZUFBVSxHQUFWLFVBQVUsQ0FBc0I7UUFDaEMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUN0Qyw2QkFBd0IsR0FBeEIsd0JBQXdCLENBQXFCO0lBQ3BELENBQUM7SUFFSjs7Ozs7O09BTUc7SUFDSSxLQUFLLENBQUMsTUFBTSxDQUNqQixnQkFBb0MsRUFDcEMsZUFBZ0M7UUFFaEMsZ0JBQWdCLEdBQUcsZ0JBQWdCLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO1FBRXBGLE1BQU0s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
@@ -1 +1 @@
1
- {"version":3,"file":"sequencer.d.ts","sourceRoot":"","sources":["../../src/sequencer/sequencer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sequencer.d.ts","sourceRoot":"","sources":["../../src/sequencer/sequencer.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,4 @@
1
1
  import { MerkleTreeId, Tx } from '@aztec/circuit-types';
2
- import { GlobalVariables } from '@aztec/circuits.js';
3
2
  import { times } from '@aztec/foundation/collection';
4
3
  import { Fr } from '@aztec/foundation/fields';
5
4
  import { createDebugLogger } from '@aztec/foundation/log';
@@ -112,29 +111,31 @@ export class Sequencer {
112
111
  return;
113
112
  }
114
113
  this.log.info(`Retrieved ${pendingTxs.length} txs from P2P pool`);
115
- const blockNumber = (await this.l2BlockSource.getBlockNumber()) + 1;
114
+ const historicalHeader = (await this.l2BlockSource.getBlock(-1))?.header;
115
+ const newBlockNumber = (historicalHeader === undefined
116
+ ? await this.l2BlockSource.getBlockNumber()
117
+ : Number(historicalHeader.globalVariables.blockNumber.toBigInt())) + 1;
116
118
  /**
117
119
  * We'll call this function before running expensive operations to avoid wasted work.
118
120
  */
119
121
  const assertBlockHeight = async () => {
120
122
  const currentBlockNumber = await this.l2BlockSource.getBlockNumber();
121
- if (currentBlockNumber + 1 !== blockNumber) {
123
+ if (currentBlockNumber + 1 !== newBlockNumber) {
122
124
  throw new Error('New block was emitted while building block');
123
125
  }
124
126
  };
125
- const newGlobalVariables = await this.globalsBuilder.buildGlobalVariables(new Fr(blockNumber));
127
+ const newGlobalVariables = await this.globalsBuilder.buildGlobalVariables(new Fr(newBlockNumber));
126
128
  // Filter out invalid txs
127
129
  // TODO: It should be responsibility of the P2P layer to validate txs before passing them on here
128
130
  const validTxs = await this.takeValidTxs(pendingTxs, newGlobalVariables);
129
131
  if (validTxs.length < this.minTxsPerBLock) {
130
132
  return;
131
133
  }
132
- this.log.info(`Building block ${blockNumber} with ${validTxs.length} transactions`);
134
+ this.log.info(`Building block ${newBlockNumber} with ${validTxs.length} transactions`);
133
135
  this.state = SequencerState.CREATING_BLOCK;
134
- const prevGlobalVariables = (await this.l2BlockSource.getBlock(-1))?.header.globalVariables ?? GlobalVariables.empty();
135
136
  // Process txs and drop the ones that fail processing
136
137
  // We create a fresh processor each time to reset any cached state (eg storage writes)
137
- const processor = await this.publicProcessorFactory.create(prevGlobalVariables, newGlobalVariables);
138
+ const processor = await this.publicProcessorFactory.create(historicalHeader, newGlobalVariables);
138
139
  const [publicProcessorDuration, [processedTxs, failedTxs]] = await elapsed(() => processor.process(validTxs));
139
140
  if (failedTxs.length > 0) {
140
141
  const failedTxData = failedTxs.map(fail => fail.tx);
@@ -360,4 +361,4 @@ export var SequencerState;
360
361
  */
361
362
  SequencerState[SequencerState["STOPPED"] = 5] = "STOPPED";
362
363
  })(SequencerState || (SequencerState = {}));
363
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VxdWVuY2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcXVlbmNlci9zZXF1ZW5jZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUErQyxZQUFZLEVBQUUsRUFBRSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFckcsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFPekQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUs3Qzs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sT0FBTyxTQUFTO0lBUXBCLFlBQ1UsU0FBc0IsRUFDdEIsY0FBcUMsRUFDckMsU0FBYyxFQUNkLFVBQWtDLEVBQ2xDLFlBQTBCLEVBQzFCLGFBQTRCLEVBQzVCLG1CQUF3QyxFQUN4QyxzQkFBOEMsRUFDdEQsU0FBMEIsRUFBRSxFQUNwQixNQUFNLGlCQUFpQixDQUFDLGlCQUFpQixDQUFDO1FBVDFDLGNBQVMsR0FBVCxTQUFTLENBQWE7UUFDdEIsbUJBQWMsR0FBZCxjQUFjLENBQXVCO1FBQ3JDLGNBQVMsR0FBVCxTQUFTLENBQUs7UUFDZCxlQUFVLEdBQVYsVUFBVSxDQUF3QjtRQUNsQyxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1Qix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQ3hDLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBd0I7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
364
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VxdWVuY2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcXVlbmNlci9zZXF1ZW5jZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUErQyxZQUFZLEVBQUUsRUFBRSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFHckcsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDbkUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQU96RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBSzdDOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxPQUFPLFNBQVM7SUFRcEIsWUFDVSxTQUFzQixFQUN0QixjQUFxQyxFQUNyQyxTQUFjLEVBQ2QsVUFBa0MsRUFDbEMsWUFBMEIsRUFDMUIsYUFBNEIsRUFDNUIsbUJBQXdDLEVBQ3hDLHNCQUE4QyxFQUN0RCxTQUEwQixFQUFFLEVBQ3BCLE1BQU0saUJBQWlCLENBQUMsaUJBQWlCLENBQUM7UUFUMUMsY0FBUyxHQUFULFNBQVMsQ0FBYTtRQUN0QixtQkFBYyxHQUFkLGNBQWMsQ0FBdUI7UUFDckMsY0FBUyxHQUFULFNBQVMsQ0FBSztRQUNkLGVBQVUsR0FBVixVQUFVLENBQXdCO1FBQ2xDLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFDeEMsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUU5QyxRQUFHLEdBQUgsR0FBRyxDQUF1QztRQWhCNUMsc0JBQWlCLEdB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