diff --git a/docs/code/modules/index.md b/docs/code/modules/index.md index 7cf6b735..dc89a467 100644 --- a/docs/code/modules/index.md +++ b/docs/code/modules/index.md @@ -575,7 +575,7 @@ the estimated rate. #### Defined in -[src/transaction/transaction.ts:1078](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/transaction/transaction.ts#L1078) +[src/transaction/transaction.ts:1104](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/transaction/transaction.ts#L1104) ___ @@ -639,7 +639,7 @@ Allows for control of fees on a `Transaction` or `SuggestedParams` object #### Defined in -[src/transaction/transaction.ts:1105](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/transaction/transaction.ts#L1105) +[src/transaction/transaction.ts:1131](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/transaction/transaction.ts#L1131) ___ @@ -967,7 +967,7 @@ Converts `bigint`'s for Uint's < 64 to `number` for easier use. #### Defined in -[src/transaction/transaction.ts:944](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/transaction/transaction.ts#L944) +[src/transaction/transaction.ts:970](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/transaction/transaction.ts#L970) ___ @@ -1943,7 +1943,7 @@ Returns the array of transactions currently present in the given `AtomicTransact #### Defined in -[src/transaction/transaction.ts:1154](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/transaction/transaction.ts#L1154) +[src/transaction/transaction.ts:1180](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/transaction/transaction.ts#L1180) ___ @@ -2330,7 +2330,7 @@ Returns suggested transaction parameters from algod unless some are already prov #### Defined in -[src/transaction/transaction.ts:1132](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/transaction/transaction.ts#L1132) +[src/transaction/transaction.ts:1158](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/transaction/transaction.ts#L1158) ___ @@ -2762,7 +2762,7 @@ A new ATC with the resources populated into the transactions #### Defined in -[src/transaction/transaction.ts:388](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/transaction/transaction.ts#L388) +[src/transaction/transaction.ts:414](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/transaction/transaction.ts#L414) ___ @@ -2791,7 +2791,7 @@ A new ATC with the changes applied #### Defined in -[src/transaction/transaction.ts:407](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/transaction/transaction.ts#L407) +[src/transaction/transaction.ts:433](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/transaction/transaction.ts#L433) ___ @@ -2941,7 +2941,7 @@ An object with transaction IDs, transactions, group transaction ID (`groupTransa #### Defined in -[src/transaction/transaction.ts:804](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/transaction/transaction.ts#L804) +[src/transaction/transaction.ts:830](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/transaction/transaction.ts#L830) ___ @@ -2970,7 +2970,7 @@ Signs and sends a group of [up to 16](https://dev.algorand.co/concepts/transacti #### Defined in -[src/transaction/transaction.ts:977](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/transaction/transaction.ts#L977) +[src/transaction/transaction.ts:1003](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/transaction/transaction.ts#L1003) ___ @@ -3243,4 +3243,4 @@ Throws an error if the transaction is not confirmed or rejected in the next `tim #### Defined in -[src/transaction/transaction.ts:1021](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/transaction/transaction.ts#L1021) +[src/transaction/transaction.ts:1047](https://github.com/algorandfoundation/algokit-utils-ts/blob/main/src/transaction/transaction.ts#L1047) diff --git a/src/transaction/transaction.spec.ts b/src/transaction/transaction.spec.ts index f79ebe7f..03934eac 100644 --- a/src/transaction/transaction.spec.ts +++ b/src/transaction/transaction.spec.ts @@ -13,7 +13,7 @@ import { AlgoAmount } from '../types/amount' import { AppClient } from '../types/app-client' import { PaymentParams, TransactionComposer } from '../types/composer' import { Arc2TransactionNote } from '../types/transaction' -import { getABIReturnValue, waitForConfirmation } from './transaction' +import { getABIReturnValue, populateAppCallResources, waitForConfirmation } from './transaction' describe('transaction', () => { const localnet = algorandFixture() @@ -1138,6 +1138,88 @@ describe('Resource population: meta', () => { expect(boxRef).toBeDefined() expect(boxRef?.appIndex).toBe(0n) }) + + test('order is deterministic', async () => { + const { algorand, context } = fixture + + const testAccount = context.testAccount + + const v9AppFactory = algorand.client.getAppFactory({ + appSpec: JSON.stringify(v9ARC32), + defaultSender: testAccount, + }) + + const v9AppClient = (await v9AppFactory.send.create({ method: 'createApplication' })).appClient + + await v9AppClient.fundAppAccount({ amount: (118_000).microAlgo() }) + + const accounts = [] + for (let i = 0; i < 4; i++) { + accounts.push(algorand.account.random().addr) + } + + const apps = [] + for (let i = 0; i < 4; i++) { + const app = await v9AppFactory.send.create({ method: 'createApplication' }) + apps.push(app.appClient.appId) + } + + const assets = [] + for (let i = 0; i < 4; i++) { + const res = await algorand.send.assetCreate({ sender: testAccount, total: 1n }) + assets.push(res.assetId) + } + + const appCall = await v9AppClient.params.call({ + method: 'manyResources', + args: [accounts, assets, apps, [1, 2, 3, 4]], + }) + + const composer = algorand.newGroup() + + composer.addAppCallMethodCall(appCall) + + for (let i = 0; i < 10; i++) { + composer.addAppCallMethodCall(await v9AppClient.params.call({ method: 'dummy', note: `${i}` })) + } + + const atc = (await composer.build()).atc + const getResources = async () => { + const populatedAtc = await populateAppCallResources(atc, algorand.client.algod) + + const resources = [] + for (const txnWithSigner of populatedAtc.buildGroup()) { + const txn = txnWithSigner.txn + + for (const acct of txn.applicationCall?.accounts ?? []) { + resources.push(acct.toString()) + } + + for (const asset of txn.applicationCall?.foreignAssets ?? []) { + resources.push(asset.toString()) + } + + for (const app of txn.applicationCall?.foreignApps ?? []) { + resources.push(app.toString()) + } + + for (const box of txn.applicationCall?.boxes ?? []) { + resources.push(`${box.appIndex}-${box.name.toString()}`) + } + } + + return resources + } + + const allResources = [] + for (let i = 0; i < 100; i++) { + allResources.push(await getResources()) + } + + for (let i = 1; i < allResources.length; i++) { + expect(allResources[i]).toEqual(allResources[0]) + } + }) }) describe('abi return', () => { diff --git a/src/transaction/transaction.ts b/src/transaction/transaction.ts index 39abffae..9f1808fb 100644 --- a/src/transaction/transaction.ts +++ b/src/transaction/transaction.ts @@ -329,8 +329,34 @@ async function getGroupExecutionInfo( throw Error(`Error resolving execution info via simulate in transaction ${groupResponse.failedAt}: ${groupResponse.failureMessage}`) } + const sortedResources = groupResponse.unnamedResourcesAccessed + + // NOTE: We explicitly want to avoid localeCompare as that can lead to different results in different environments + const compare = (a: string | bigint, b: string | bigint) => (a < b ? -1 : a > b ? 1 : 0) + + if (sortedResources) { + sortedResources.accounts?.sort((a, b) => compare(a.toString(), b.toString())) + sortedResources.assets?.sort(compare) + sortedResources.apps?.sort(compare) + sortedResources.boxes?.sort((a, b) => { + const aStr = `${a.app}-${a.name}` + const bStr = `${b.app}-${b.name}` + return compare(aStr, bStr) + }) + sortedResources.appLocals?.sort((a, b) => { + const aStr = `${a.app}-${a.account}` + const bStr = `${b.app}-${b.account}` + return compare(aStr, bStr) + }) + sortedResources.assetHoldings?.sort((a, b) => { + const aStr = `${a.asset}-${a.account}` + const bStr = `${b.asset}-${b.account}` + return compare(aStr, bStr) + }) + } + return { - groupUnnamedResourcesAccessed: sendParams.populateAppCallResources ? groupResponse.unnamedResourcesAccessed : undefined, + groupUnnamedResourcesAccessed: sendParams.populateAppCallResources ? sortedResources : undefined, txns: groupResponse.txnResults.map((txn, i) => { const originalTxn = atc['transactions'][i].txn as algosdk.Transaction diff --git a/tests/example-contracts/resource-packer/artifacts/ExternalApp.arc32.json b/tests/example-contracts/resource-packer/artifacts/ExternalApp.arc32.json index c8d65b3f..279fb85e 100644 --- a/tests/example-contracts/resource-packer/artifacts/ExternalApp.arc32.json +++ b/tests/example-contracts/resource-packer/artifacts/ExternalApp.arc32.json @@ -79,7 +79,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCmludGNibG9jayAxIDAgNgpieXRlY2Jsb2NrIDB4NjI2Zjc4NGI2NTc5IDB4Yjg0NDdiMzYgMHg2NjZmNmYgMHg2MTczNjEgMHgKCi8vIFRoaXMgVEVBTCB3YXMgZ2VuZXJhdGVkIGJ5IFRFQUxTY3JpcHQgdjAuMTA2LjMKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludGMgMiAvLyA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpjYWxsX09wdEluICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKmNyZWF0ZV9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRAoKKk5PVF9JTVBMRU1FTlRFRDoKCS8vIFRoZSByZXF1ZXN0ZWQgYWN0aW9uIGlzIG5vdCBpbXBsZW1lbnRlZCBpbiB0aGlzIGNvbnRyYWN0LiBBcmUgeW91IHVzaW5nIHRoZSBjb3JyZWN0IE9uQ29tcGxldGU/IERpZCB5b3Ugc2V0IHlvdXIgYXBwIElEPwoJZXJyCgovLyBvcHRJblRvQXBwbGljYXRpb24oKXZvaWQKKmFiaV9yb3V0ZV9vcHRJblRvQXBwbGljYXRpb246CgkvLyBleGVjdXRlIG9wdEluVG9BcHBsaWNhdGlvbigpdm9pZAoJY2FsbHN1YiBvcHRJblRvQXBwbGljYXRpb24KCWludGMgMCAvLyAxCglyZXR1cm4KCi8vIG9wdEluVG9BcHBsaWNhdGlvbigpOiB2b2lkCm9wdEluVG9BcHBsaWNhdGlvbjoKCXByb3RvIDAgMAoKCS8vIHRlc3RzL2V4YW1wbGUtY29udHJhY3RzL3Jlc291cmNlLXBhY2tlci9yZXNvdXJjZS1wYWNrZXIuYWxnby50czoxMgoJLy8gdGhpcy5sb2NhbEtleSh0aGlzLnR4bi5zZW5kZXIpLnZhbHVlID0gJ2ZvbycKCXR4biBTZW5kZXIKCXB1c2hieXRlcyAweDZjNmY2MzYxNmM0YjY1NzkgLy8gImxvY2FsS2V5IgoJYnl0ZWMgMiAvLyAgImZvbyIKCWFwcF9sb2NhbF9wdXQKCXJldHN1YgoKLy8gZHVtbXkoKXZvaWQKKmFiaV9yb3V0ZV9kdW1teToKCS8vIGV4ZWN1dGUgZHVtbXkoKXZvaWQKCWNhbGxzdWIgZHVtbXkKCWludGMgMCAvLyAxCglyZXR1cm4KCi8vIGR1bW15KCk6IHZvaWQKZHVtbXk6Cglwcm90byAwIDAKCXJldHN1YgoKLy8gZXJyb3IoKXZvaWQKKmFiaV9yb3V0ZV9lcnJvcjoKCS8vIGV4ZWN1dGUgZXJyb3IoKXZvaWQKCWNhbGxzdWIgZXJyb3IKCWludGMgMCAvLyAxCglyZXR1cm4KCi8vIGVycm9yKCk6IHZvaWQKZXJyb3I6Cglwcm90byAwIDAKCgkvLyBTb21lIGVycm9yCgllcnIKCXJldHN1YgoKLy8gYm94V2l0aFBheW1lbnQocGF5KXZvaWQKKmFiaV9yb3V0ZV9ib3hXaXRoUGF5bWVudDoKCS8vIF9wYXltZW50OiBwYXkKCXR4biBHcm91cEluZGV4CglpbnRjIDAgLy8gMQoJLQoJZHVwCglndHhucyBUeXBlRW51bQoJaW50YyAwIC8vICBwYXkKCT09CgoJLy8gYXJndW1lbnQgMCAoX3BheW1lbnQpIGZvciBib3hXaXRoUGF5bWVudCBtdXN0IGJlIGEgcGF5IHRyYW5zYWN0aW9uCglhc3NlcnQKCgkvLyBleGVjdXRlIGJveFdpdGhQYXltZW50KHBheSl2b2lkCgljYWxsc3ViIGJveFdpdGhQYXltZW50CglpbnRjIDAgLy8gMQoJcmV0dXJuCgovLyBib3hXaXRoUGF5bWVudChfcGF5bWVudDogUGF5VHhuKTogdm9pZApib3hXaXRoUGF5bWVudDoKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2V4YW1wbGUtY29udHJhY3RzL3Jlc291cmNlLXBhY2tlci9yZXNvdXJjZS1wYWNrZXIuYWxnby50czoyMgoJLy8gdGhpcy5ib3hLZXkudmFsdWUgPSAnZm9vJwoJYnl0ZWMgMCAvLyAgImJveEtleSIKCWR1cAoJYm94X2RlbAoJcG9wCglieXRlYyAyIC8vICAiZm9vIgoJYm94X3B1dAoJcmV0c3ViCgovLyBjcmVhdGVBc3NldCgpdm9pZAoqYWJpX3JvdXRlX2NyZWF0ZUFzc2V0OgoJLy8gZXhlY3V0ZSBjcmVhdGVBc3NldCgpdm9pZAoJY2FsbHN1YiBjcmVhdGVBc3NldAoJaW50YyAwIC8vIDEKCXJldHVybgoKLy8gY3JlYXRlQXNzZXQoKTogdm9pZApjcmVhdGVBc3NldDoKCXByb3RvIDAgMAoKCS8vIHRlc3RzL2V4YW1wbGUtY29udHJhY3RzL3Jlc291cmNlLXBhY2tlci9yZXNvdXJjZS1wYWNrZXIuYWxnby50czoyNgoJLy8gdGhpcy5hc2EudmFsdWUgPSBzZW5kQXNzZXRDcmVhdGlvbih7CgkvLyAgICAgICBjb25maWdBc3NldFRvdGFsOiAxLAoJLy8gICAgIH0pCglieXRlYyAzIC8vICAiYXNhIgoJaXR4bl9iZWdpbgoJcHVzaGludCAzIC8vIGFjZmcKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyB0ZXN0cy9leGFtcGxlLWNvbnRyYWN0cy9yZXNvdXJjZS1wYWNrZXIvcmVzb3VyY2UtcGFja2VyLmFsZ28udHM6MjcKCS8vIGNvbmZpZ0Fzc2V0VG90YWw6IDEKCWludGMgMCAvLyAxCglpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VG90YWwKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnRjIDEgLy8gMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglpdHhuIENyZWF0ZWRBc3NldElECglhcHBfZ2xvYmFsX3B1dAoJcmV0c3ViCgovLyBzZW5kZXJBc3NldEJhbGFuY2UoKXZvaWQKKmFiaV9yb3V0ZV9zZW5kZXJBc3NldEJhbGFuY2U6CgkvLyBleGVjdXRlIHNlbmRlckFzc2V0QmFsYW5jZSgpdm9pZAoJY2FsbHN1YiBzZW5kZXJBc3NldEJhbGFuY2UKCWludGMgMCAvLyAxCglyZXR1cm4KCi8vIHNlbmRlckFzc2V0QmFsYW5jZSgpOiB2b2lkCnNlbmRlckFzc2V0QmFsYW5jZToKCXByb3RvIDAgMAoKCS8vIHRlc3RzL2V4YW1wbGUtY29udHJhY3RzL3Jlc291cmNlLXBhY2tlci9yZXNvdXJjZS1wYWNrZXIuYWxnby50czozMgoJLy8gYXNzZXJ0KCF0aGlzLnR4bi5zZW5kZXIuaXNPcHRlZEluVG9Bc3NldCh0aGlzLmFzYS52YWx1ZSkpCgl0eG4gU2VuZGVyCglieXRlYyAzIC8vICAiYXNhIgoJYXBwX2dsb2JhbF9nZXQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJc3dhcAoJcG9wCgkhCglhc3NlcnQKCXJldHN1YgoKLy8gY3JlYXRlQm94SW5OZXdBcHAocGF5KXZvaWQKKmFiaV9yb3V0ZV9jcmVhdGVCb3hJbk5ld0FwcDoKCS8vIG1iclBheW1lbnQ6IHBheQoJdHhuIEdyb3VwSW5kZXgKCWludGMgMCAvLyAxCgktCglkdXAKCWd0eG5zIFR5cGVFbnVtCglpbnRjIDAgLy8gIHBheQoJPT0KCgkvLyBhcmd1bWVudCAwIChtYnJQYXltZW50KSBmb3IgY3JlYXRlQm94SW5OZXdBcHAgbXVzdCBiZSBhIHBheSB0cmFuc2FjdGlvbgoJYXNzZXJ0CgoJLy8gZXhlY3V0ZSBjcmVhdGVCb3hJbk5ld0FwcChwYXkpdm9pZAoJY2FsbHN1YiBjcmVhdGVCb3hJbk5ld0FwcAoJaW50YyAwIC8vIDEKCXJldHVybgoKLy8gY3JlYXRlQm94SW5OZXdBcHAobWJyUGF5bWVudDogUGF5VHhuKTogdm9pZApjcmVhdGVCb3hJbk5ld0FwcDoKCXByb3RvIDEgMAoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlYyA0IC8vIDB4CglkdXAKCgkvLyB0ZXN0cy9leGFtcGxlLWNvbnRyYWN0cy9yZXNvdXJjZS1wYWNrZXIvcmVzb3VyY2UtcGFja2VyLmFsZ28udHM6MzYKCS8vIHZlcmlmeVBheVR4bihtYnJQYXltZW50LCB7CgkvLyAgICAgICByZWNlaXZlcjogdGhpcy5hcHAuYWRkcmVzcywKCS8vICAgICB9KQoJLy8gdmVyaWZ5IHJlY2VpdmVyCglmcmFtZV9kaWcgLTEgLy8gbWJyUGF5bWVudDogUGF5VHhuCglndHhucyBSZWNlaXZlcgoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCT09CgoJLy8gdHJhbnNhY3Rpb24gdmVyaWZpY2F0aW9uIGZhaWxlZDogeyJ0eG4iOiJtYnJQYXltZW50IiwiZmllbGQiOiJyZWNlaXZlciIsImV4cGVjdGVkIjoidGhpcy5hcHAuYWRkcmVzcyJ9Cglhc3NlcnQKCgkvLyB0ZXN0cy9leGFtcGxlLWNvbnRyYWN0cy9yZXNvdXJjZS1wYWNrZXIvcmVzb3VyY2UtcGFja2VyLmFsZ28udHM6NDAKCS8vIHNlbmRNZXRob2RDYWxsPFtdLCB2b2lkPih7CgkvLyAgICAgICBuYW1lOiAnY3JlYXRlQXBwbGljYXRpb24nLAoJLy8gICAgICAgYXBwcm92YWxQcm9ncmFtOiBJbm5lckJveEFwcC5hcHByb3ZhbFByb2dyYW0oKSwKCS8vICAgICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBJbm5lckJveEFwcC5jbGVhclByb2dyYW0oKSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50YyAyIC8vICBhcHBsCglpdHhuX2ZpZWxkIFR5cGVFbnVtCglieXRlYyAxIC8vICBtZXRob2QgImNyZWF0ZUFwcGxpY2F0aW9uKCl2b2lkIgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyB0ZXN0cy9leGFtcGxlLWNvbnRyYWN0cy9yZXNvdXJjZS1wYWNrZXIvcmVzb3VyY2UtcGFja2VyLmFsZ28udHM6NDIKCS8vIGFwcHJvdmFsUHJvZ3JhbTogSW5uZXJCb3hBcHAuYXBwcm92YWxQcm9ncmFtKCkKCXB1c2hieXRlcyAweDBhMjAwMTAxMzExODE0ODEwNjBiMzExOTA4OGQwYzAwMjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMWEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODgwMDAyMjI0MzhhMDAwMDgwMDg2NTZkNzA3NDc5NDI2Zjc4ODEwMGI5NDg4OTIyNDM4MDA0Yjg0NDdiMzYzNjFhMDA4ZTAxZmZmMTAwODAwNGE2OGJkMjk3MzYxYTAwOGUwMWZmY2MwMAoJaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW0KCgkvLyB0ZXN0cy9leGFtcGxlLWNvbnRyYWN0cy9yZXNvdXJjZS1wYWNrZXIvcmVzb3VyY2UtcGFja2VyLmFsZ28udHM6NDMKCS8vIGNsZWFyU3RhdGVQcm9ncmFtOiBJbm5lckJveEFwcC5jbGVhclByb2dyYW0oKQoJcHVzaGJ5dGVzIDB4MGEKCWl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnRjIDEgLy8gMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gdGVzdHMvZXhhbXBsZS1jb250cmFjdHMvcmVzb3VyY2UtcGFja2VyL3Jlc291cmNlLXBhY2tlci5hbGdvLnRzOjQ2CgkvLyBhcHBJZCA9IHRoaXMuaXR4bi5jcmVhdGVkQXBwbGljYXRpb25JRAoJaXR4biBDcmVhdGVkQXBwbGljYXRpb25JRAoJZnJhbWVfYnVyeSAwIC8vIGFwcElkOiB1aW50NjQKCgkvLyB0ZXN0cy9leGFtcGxlLWNvbnRyYWN0cy9yZXNvdXJjZS1wYWNrZXIvcmVzb3VyY2UtcGFja2VyLmFsZ28udHM6NDcKCS8vIGFwcEFkZHIgPSBhcHBJZC5hZGRyZXNzCglmcmFtZV9kaWcgMCAvLyBhcHBJZDogdWludDY0CglhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCglwb3AKCWZyYW1lX2J1cnkgMSAvLyBhcHBBZGRyOiBhZGRyZXNzCgoJLy8gdGVzdHMvZXhhbXBsZS1jb250cmFjdHMvcmVzb3VyY2UtcGFja2VyL3Jlc291cmNlLXBhY2tlci5hbGdvLnRzOjQ5CgkvLyBzZW5kUGF5bWVudCh7IHJlY2VpdmVyOiBhcHBBZGRyLCBhbW91bnQ6IG1iclBheW1lbnQuYW1vdW50IH0pCglpdHhuX2JlZ2luCglpbnRjIDAgLy8gIHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIHRlc3RzL2V4YW1wbGUtY29udHJhY3RzL3Jlc291cmNlLXBhY2tlci9yZXNvdXJjZS1wYWNrZXIuYWxnby50czo0OQoJLy8gcmVjZWl2ZXI6IGFwcEFkZHIKCWZyYW1lX2RpZyAxIC8vIGFwcEFkZHI6IGFkZHJlc3MKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyB0ZXN0cy9leGFtcGxlLWNvbnRyYWN0cy9yZXNvdXJjZS1wYWNrZXIvcmVzb3VyY2UtcGFja2VyLmFsZ28udHM6NDkKCS8vIGFtb3VudDogbWJyUGF5bWVudC5hbW91bnQKCWZyYW1lX2RpZyAtMSAvLyBtYnJQYXltZW50OiBQYXlUeG4KCWd0eG5zIEFtb3VudAoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnRjIDEgLy8gMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gdGVzdHMvZXhhbXBsZS1jb250cmFjdHMvcmVzb3VyY2UtcGFja2VyL3Jlc291cmNlLXBhY2tlci5hbGdvLnRzOjUxCgkvLyBzZW5kTWV0aG9kQ2FsbDx0eXBlb2YgSW5uZXJCb3hBcHAucHJvdG90eXBlLmNyZWF0ZUVtcHR5Qm94Pih7CgkvLyAgICAgICBhcHBsaWNhdGlvbklEOiBhcHBJZCwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50YyAyIC8vICBhcHBsCglpdHhuX2ZpZWxkIFR5cGVFbnVtCglwdXNoYnl0ZXMgMHhhNjhiZDI5NyAvLyBtZXRob2QgImNyZWF0ZUVtcHR5Qm94KCl2b2lkIgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyB0ZXN0cy9leGFtcGxlLWNvbnRyYWN0cy9yZXNvdXJjZS1wYWNrZXIvcmVzb3VyY2UtcGFja2VyLmFsZ28udHM6NTIKCS8vIGFwcGxpY2F0aW9uSUQ6IGFwcElkCglmcmFtZV9kaWcgMCAvLyBhcHBJZDogdWludDY0CglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnRjIDEgLy8gMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCiphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb246CglpbnRjIDAgLy8gMQoJcmV0dXJuCgoqY3JlYXRlX05vT3A6CglieXRlYyAxIC8vICBtZXRob2QgImNyZWF0ZUFwcGxpY2F0aW9uKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbgoKCS8vIHRoaXMgY29udHJhY3QgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBnaXZlbiBBQkkgbWV0aG9kIGZvciBjcmVhdGUgTm9PcAoJZXJyCgoqY2FsbF9Ob09wOgoJcHVzaGJ5dGVzIDB4YTMwY2U3ZmYgLy8gbWV0aG9kICJkdW1teSgpdm9pZCIKCXB1c2hieXRlcyAweDQ0ZDBkYTBkIC8vIG1ldGhvZCAiZXJyb3IoKXZvaWQiCglwdXNoYnl0ZXMgMHhkNjFlNDI1NSAvLyBtZXRob2QgImJveFdpdGhQYXltZW50KHBheSl2b2lkIgoJcHVzaGJ5dGVzIDB4YTY1YWFiZmUgLy8gbWV0aG9kICJjcmVhdGVBc3NldCgpdm9pZCIKCXB1c2hieXRlcyAweDY1NWM1ZTAyIC8vIG1ldGhvZCAic2VuZGVyQXNzZXRCYWxhbmNlKCl2b2lkIgoJcHVzaGJ5dGVzIDB4MWE0NTZhY2EgLy8gbWV0aG9kICJjcmVhdGVCb3hJbk5ld0FwcChwYXkpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfZHVtbXkgKmFiaV9yb3V0ZV9lcnJvciAqYWJpX3JvdXRlX2JveFdpdGhQYXltZW50ICphYmlfcm91dGVfY3JlYXRlQXNzZXQgKmFiaV9yb3V0ZV9zZW5kZXJBc3NldEJhbGFuY2UgKmFiaV9yb3V0ZV9jcmVhdGVCb3hJbk5ld0FwcAoKCS8vIHRoaXMgY29udHJhY3QgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBnaXZlbiBBQkkgbWV0aG9kIGZvciBjYWxsIE5vT3AKCWVycgoKKmNhbGxfT3B0SW46CglwdXNoYnl0ZXMgMHgwMWEzYTNmZiAvLyBtZXRob2QgIm9wdEluVG9BcHBsaWNhdGlvbigpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfb3B0SW5Ub0FwcGxpY2F0aW9uCgoJLy8gdGhpcyBjb250cmFjdCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIGdpdmVuIEFCSSBtZXRob2QgZm9yIGNhbGwgT3B0SW4KCWVycg==", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCmludGNibG9jayAxIDAgNgpieXRlY2Jsb2NrIDB4NjI2Zjc4NGI2NTc5IDB4Yjg0NDdiMzYgMHg2NjZmNmYgMHg2MTczNjEgMHgKCi8vIFRoaXMgVEVBTCB3YXMgZ2VuZXJhdGVkIGJ5IFRFQUxTY3JpcHQgdjAuMTA2LjMKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludGMgMiAvLyA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpjYWxsX09wdEluICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKmNyZWF0ZV9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRAoKKk5PVF9JTVBMRU1FTlRFRDoKCS8vIFRoZSByZXF1ZXN0ZWQgYWN0aW9uIGlzIG5vdCBpbXBsZW1lbnRlZCBpbiB0aGlzIGNvbnRyYWN0LiBBcmUgeW91IHVzaW5nIHRoZSBjb3JyZWN0IE9uQ29tcGxldGU/IERpZCB5b3Ugc2V0IHlvdXIgYXBwIElEPwoJZXJyCgovLyBvcHRJblRvQXBwbGljYXRpb24oKXZvaWQKKmFiaV9yb3V0ZV9vcHRJblRvQXBwbGljYXRpb246CgkvLyBleGVjdXRlIG9wdEluVG9BcHBsaWNhdGlvbigpdm9pZAoJY2FsbHN1YiBvcHRJblRvQXBwbGljYXRpb24KCWludGMgMCAvLyAxCglyZXR1cm4KCi8vIG9wdEluVG9BcHBsaWNhdGlvbigpOiB2b2lkCm9wdEluVG9BcHBsaWNhdGlvbjoKCXByb3RvIDAgMAoKCS8vIHJlc291cmNlLXBhY2tlci5hbGdvLnRzOjEyCgkvLyB0aGlzLmxvY2FsS2V5KHRoaXMudHhuLnNlbmRlcikudmFsdWUgPSAnZm9vJwoJdHhuIFNlbmRlcgoJcHVzaGJ5dGVzIDB4NmM2ZjYzNjE2YzRiNjU3OSAvLyAibG9jYWxLZXkiCglieXRlYyAyIC8vICAiZm9vIgoJYXBwX2xvY2FsX3B1dAoJcmV0c3ViCgovLyBkdW1teSgpdm9pZAoqYWJpX3JvdXRlX2R1bW15OgoJLy8gZXhlY3V0ZSBkdW1teSgpdm9pZAoJY2FsbHN1YiBkdW1teQoJaW50YyAwIC8vIDEKCXJldHVybgoKLy8gZHVtbXkoKTogdm9pZApkdW1teToKCXByb3RvIDAgMAoJcmV0c3ViCgovLyBlcnJvcigpdm9pZAoqYWJpX3JvdXRlX2Vycm9yOgoJLy8gZXhlY3V0ZSBlcnJvcigpdm9pZAoJY2FsbHN1YiBlcnJvcgoJaW50YyAwIC8vIDEKCXJldHVybgoKLy8gZXJyb3IoKTogdm9pZAplcnJvcjoKCXByb3RvIDAgMAoKCS8vIFNvbWUgZXJyb3IKCWVycgoJcmV0c3ViCgovLyBib3hXaXRoUGF5bWVudChwYXkpdm9pZAoqYWJpX3JvdXRlX2JveFdpdGhQYXltZW50OgoJLy8gX3BheW1lbnQ6IHBheQoJdHhuIEdyb3VwSW5kZXgKCWludGMgMCAvLyAxCgktCglkdXAKCWd0eG5zIFR5cGVFbnVtCglpbnRjIDAgLy8gIHBheQoJPT0KCgkvLyBhcmd1bWVudCAwIChfcGF5bWVudCkgZm9yIGJveFdpdGhQYXltZW50IG11c3QgYmUgYSBwYXkgdHJhbnNhY3Rpb24KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYm94V2l0aFBheW1lbnQocGF5KXZvaWQKCWNhbGxzdWIgYm94V2l0aFBheW1lbnQKCWludGMgMCAvLyAxCglyZXR1cm4KCi8vIGJveFdpdGhQYXltZW50KF9wYXltZW50OiBQYXlUeG4pOiB2b2lkCmJveFdpdGhQYXltZW50OgoJcHJvdG8gMSAwCgoJLy8gcmVzb3VyY2UtcGFja2VyLmFsZ28udHM6MjIKCS8vIHRoaXMuYm94S2V5LnZhbHVlID0gJ2ZvbycKCWJ5dGVjIDAgLy8gICJib3hLZXkiCglkdXAKCWJveF9kZWwKCXBvcAoJYnl0ZWMgMiAvLyAgImZvbyIKCWJveF9wdXQKCXJldHN1YgoKLy8gY3JlYXRlQXNzZXQoKXZvaWQKKmFiaV9yb3V0ZV9jcmVhdGVBc3NldDoKCS8vIGV4ZWN1dGUgY3JlYXRlQXNzZXQoKXZvaWQKCWNhbGxzdWIgY3JlYXRlQXNzZXQKCWludGMgMCAvLyAxCglyZXR1cm4KCi8vIGNyZWF0ZUFzc2V0KCk6IHZvaWQKY3JlYXRlQXNzZXQ6Cglwcm90byAwIDAKCgkvLyByZXNvdXJjZS1wYWNrZXIuYWxnby50czoyNgoJLy8gdGhpcy5hc2EudmFsdWUgPSBzZW5kQXNzZXRDcmVhdGlvbih7CgkvLyAgICAgICBjb25maWdBc3NldFRvdGFsOiAxLAoJLy8gICAgIH0pCglieXRlYyAzIC8vICAiYXNhIgoJaXR4bl9iZWdpbgoJcHVzaGludCAzIC8vIGFjZmcKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyByZXNvdXJjZS1wYWNrZXIuYWxnby50czoyNwoJLy8gY29uZmlnQXNzZXRUb3RhbDogMQoJaW50YyAwIC8vIDEKCWl0eG5fZmllbGQgQ29uZmlnQXNzZXRUb3RhbAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludGMgMSAvLyAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCWl0eG4gQ3JlYXRlZEFzc2V0SUQKCWFwcF9nbG9iYWxfcHV0CglyZXRzdWIKCi8vIHNlbmRlckFzc2V0QmFsYW5jZSgpdm9pZAoqYWJpX3JvdXRlX3NlbmRlckFzc2V0QmFsYW5jZToKCS8vIGV4ZWN1dGUgc2VuZGVyQXNzZXRCYWxhbmNlKCl2b2lkCgljYWxsc3ViIHNlbmRlckFzc2V0QmFsYW5jZQoJaW50YyAwIC8vIDEKCXJldHVybgoKLy8gc2VuZGVyQXNzZXRCYWxhbmNlKCk6IHZvaWQKc2VuZGVyQXNzZXRCYWxhbmNlOgoJcHJvdG8gMCAwCgoJLy8gcmVzb3VyY2UtcGFja2VyLmFsZ28udHM6MzIKCS8vIGFzc2VydCghdGhpcy50eG4uc2VuZGVyLmlzT3B0ZWRJblRvQXNzZXQodGhpcy5hc2EudmFsdWUpKQoJdHhuIFNlbmRlcgoJYnl0ZWMgMyAvLyAgImFzYSIKCWFwcF9nbG9iYWxfZ2V0Cglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJIQoJYXNzZXJ0CglyZXRzdWIKCi8vIGNyZWF0ZUJveEluTmV3QXBwKHBheSl2b2lkCiphYmlfcm91dGVfY3JlYXRlQm94SW5OZXdBcHA6CgkvLyBtYnJQYXltZW50OiBwYXkKCXR4biBHcm91cEluZGV4CglpbnRjIDAgLy8gMQoJLQoJZHVwCglndHhucyBUeXBlRW51bQoJaW50YyAwIC8vICBwYXkKCT09CgoJLy8gYXJndW1lbnQgMCAobWJyUGF5bWVudCkgZm9yIGNyZWF0ZUJveEluTmV3QXBwIG11c3QgYmUgYSBwYXkgdHJhbnNhY3Rpb24KCWFzc2VydAoKCS8vIGV4ZWN1dGUgY3JlYXRlQm94SW5OZXdBcHAocGF5KXZvaWQKCWNhbGxzdWIgY3JlYXRlQm94SW5OZXdBcHAKCWludGMgMCAvLyAxCglyZXR1cm4KCi8vIGNyZWF0ZUJveEluTmV3QXBwKG1iclBheW1lbnQ6IFBheVR4bik6IHZvaWQKY3JlYXRlQm94SW5OZXdBcHA6Cglwcm90byAxIDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZWMgNCAvLyAweAoJZHVwCgoJLy8gcmVzb3VyY2UtcGFja2VyLmFsZ28udHM6MzYKCS8vIHZlcmlmeVBheVR4bihtYnJQYXltZW50LCB7CgkvLyAgICAgICByZWNlaXZlcjogdGhpcy5hcHAuYWRkcmVzcywKCS8vICAgICB9KQoJLy8gdmVyaWZ5IHJlY2VpdmVyCglmcmFtZV9kaWcgLTEgLy8gbWJyUGF5bWVudDogUGF5VHhuCglndHhucyBSZWNlaXZlcgoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCT09CgoJLy8gdHJhbnNhY3Rpb24gdmVyaWZpY2F0aW9uIGZhaWxlZDogeyJ0eG4iOiJtYnJQYXltZW50IiwiZmllbGQiOiJyZWNlaXZlciIsImV4cGVjdGVkIjoidGhpcy5hcHAuYWRkcmVzcyJ9Cglhc3NlcnQKCgkvLyByZXNvdXJjZS1wYWNrZXIuYWxnby50czo0MAoJLy8gc2VuZE1ldGhvZENhbGw8W10sIHZvaWQ+KHsKCS8vICAgICAgIG5hbWU6ICdjcmVhdGVBcHBsaWNhdGlvbicsCgkvLyAgICAgICBhcHByb3ZhbFByb2dyYW06IElubmVyQm94QXBwLmFwcHJvdmFsUHJvZ3JhbSgpLAoJLy8gICAgICAgY2xlYXJTdGF0ZVByb2dyYW06IElubmVyQm94QXBwLmNsZWFyUHJvZ3JhbSgpLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnRjIDIgLy8gIGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCWJ5dGVjIDEgLy8gIG1ldGhvZCAiY3JlYXRlQXBwbGljYXRpb24oKXZvaWQiCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIHJlc291cmNlLXBhY2tlci5hbGdvLnRzOjQyCgkvLyBhcHByb3ZhbFByb2dyYW06IElubmVyQm94QXBwLmFwcHJvdmFsUHJvZ3JhbSgpCglwdXNoYnl0ZXMgMHgwYTIwMDEwMTMxMTgxNDgxMDYwYjMxMTkwODhkMGMwMDI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFhMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg4MDAwMjIyNDM4YTAwMDA4MDA4NjU2ZDcwNzQ3OTQyNmY3ODgxMDBiOTQ4ODkyMjQzODAwNGI4NDQ3YjM2MzYxYTAwOGUwMWZmZjEwMDgwMDRhNjhiZDI5NzM2MWEwMDhlMDFmZmNjMDAKCWl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtCgoJLy8gcmVzb3VyY2UtcGFja2VyLmFsZ28udHM6NDMKCS8vIGNsZWFyU3RhdGVQcm9ncmFtOiBJbm5lckJveEFwcC5jbGVhclByb2dyYW0oKQoJcHVzaGJ5dGVzIDB4MGEKCWl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnRjIDEgLy8gMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gcmVzb3VyY2UtcGFja2VyLmFsZ28udHM6NDYKCS8vIGFwcElkID0gdGhpcy5pdHhuLmNyZWF0ZWRBcHBsaWNhdGlvbklECglpdHhuIENyZWF0ZWRBcHBsaWNhdGlvbklECglmcmFtZV9idXJ5IDAgLy8gYXBwSWQ6IHVpbnQ2NAoKCS8vIHJlc291cmNlLXBhY2tlci5hbGdvLnRzOjQ3CgkvLyBhcHBBZGRyID0gYXBwSWQuYWRkcmVzcwoJZnJhbWVfZGlnIDAgLy8gYXBwSWQ6IHVpbnQ2NAoJYXBwX3BhcmFtc19nZXQgQXBwQWRkcmVzcwoJcG9wCglmcmFtZV9idXJ5IDEgLy8gYXBwQWRkcjogYWRkcmVzcwoKCS8vIHJlc291cmNlLXBhY2tlci5hbGdvLnRzOjQ5CgkvLyBzZW5kUGF5bWVudCh7IHJlY2VpdmVyOiBhcHBBZGRyLCBhbW91bnQ6IG1iclBheW1lbnQuYW1vdW50IH0pCglpdHhuX2JlZ2luCglpbnRjIDAgLy8gIHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIHJlc291cmNlLXBhY2tlci5hbGdvLnRzOjQ5CgkvLyByZWNlaXZlcjogYXBwQWRkcgoJZnJhbWVfZGlnIDEgLy8gYXBwQWRkcjogYWRkcmVzcwoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIHJlc291cmNlLXBhY2tlci5hbGdvLnRzOjQ5CgkvLyBhbW91bnQ6IG1iclBheW1lbnQuYW1vdW50CglmcmFtZV9kaWcgLTEgLy8gbWJyUGF5bWVudDogUGF5VHhuCglndHhucyBBbW91bnQKCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50YyAxIC8vIDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vIHJlc291cmNlLXBhY2tlci5hbGdvLnRzOjUxCgkvLyBzZW5kTWV0aG9kQ2FsbDx0eXBlb2YgSW5uZXJCb3hBcHAucHJvdG90eXBlLmNyZWF0ZUVtcHR5Qm94Pih7CgkvLyAgICAgICBhcHBsaWNhdGlvbklEOiBhcHBJZCwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50YyAyIC8vICBhcHBsCglpdHhuX2ZpZWxkIFR5cGVFbnVtCglwdXNoYnl0ZXMgMHhhNjhiZDI5NyAvLyBtZXRob2QgImNyZWF0ZUVtcHR5Qm94KCl2b2lkIgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyByZXNvdXJjZS1wYWNrZXIuYWxnby50czo1MgoJLy8gYXBwbGljYXRpb25JRDogYXBwSWQKCWZyYW1lX2RpZyAwIC8vIGFwcElkOiB1aW50NjQKCWl0eG5fZmllbGQgQXBwbGljYXRpb25JRAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludGMgMSAvLyAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbjoKCWludGMgMCAvLyAxCglyZXR1cm4KCipjcmVhdGVfTm9PcDoKCWJ5dGVjIDEgLy8gIG1ldGhvZCAiY3JlYXRlQXBwbGljYXRpb24oKXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uCgoJLy8gdGhpcyBjb250cmFjdCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIGdpdmVuIEFCSSBtZXRob2QgZm9yIGNyZWF0ZSBOb09wCgllcnIKCipjYWxsX05vT3A6CglwdXNoYnl0ZXMgMHhhMzBjZTdmZiAvLyBtZXRob2QgImR1bW15KCl2b2lkIgoJcHVzaGJ5dGVzIDB4NDRkMGRhMGQgLy8gbWV0aG9kICJlcnJvcigpdm9pZCIKCXB1c2hieXRlcyAweGQ2MWU0MjU1IC8vIG1ldGhvZCAiYm94V2l0aFBheW1lbnQocGF5KXZvaWQiCglwdXNoYnl0ZXMgMHhhNjVhYWJmZSAvLyBtZXRob2QgImNyZWF0ZUFzc2V0KCl2b2lkIgoJcHVzaGJ5dGVzIDB4NjU1YzVlMDIgLy8gbWV0aG9kICJzZW5kZXJBc3NldEJhbGFuY2UoKXZvaWQiCglwdXNoYnl0ZXMgMHgxYTQ1NmFjYSAvLyBtZXRob2QgImNyZWF0ZUJveEluTmV3QXBwKHBheSl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9kdW1teSAqYWJpX3JvdXRlX2Vycm9yICphYmlfcm91dGVfYm94V2l0aFBheW1lbnQgKmFiaV9yb3V0ZV9jcmVhdGVBc3NldCAqYWJpX3JvdXRlX3NlbmRlckFzc2V0QmFsYW5jZSAqYWJpX3JvdXRlX2NyZWF0ZUJveEluTmV3QXBwCgoJLy8gdGhpcyBjb250cmFjdCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIGdpdmVuIEFCSSBtZXRob2QgZm9yIGNhbGwgTm9PcAoJZXJyCgoqY2FsbF9PcHRJbjoKCXB1c2hieXRlcyAweDAxYTNhM2ZmIC8vIG1ldGhvZCAib3B0SW5Ub0FwcGxpY2F0aW9uKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9vcHRJblRvQXBwbGljYXRpb24KCgkvLyB0aGlzIGNvbnRyYWN0IGRvZXMgbm90IGltcGxlbWVudCB0aGUgZ2l2ZW4gQUJJIG1ldGhvZCBmb3IgY2FsbCBPcHRJbgoJZXJy", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEw" }, "contract": { diff --git a/tests/example-contracts/resource-packer/artifacts/InnerBoxApp.arc32.json b/tests/example-contracts/resource-packer/artifacts/InnerBoxApp.arc32.json index 4826d729..974d2e78 100644 --- a/tests/example-contracts/resource-packer/artifacts/InnerBoxApp.arc32.json +++ b/tests/example-contracts/resource-packer/artifacts/InnerBoxApp.arc32.json @@ -39,7 +39,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCmludGNibG9jayAxCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjEwNi4zCi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hbGdvcmFuZGZvdW5kYXRpb24vVEVBTFNjcmlwdAoKLy8gVGhpcyBjb250cmFjdCBpcyBjb21wbGlhbnQgd2l0aCBhbmQvb3IgaW1wbGVtZW50cyB0aGUgZm9sbG93aW5nIEFSQ3M6IFsgQVJDNCBdCgovLyBUaGUgZm9sbG93aW5nIHRlbiBsaW5lcyBvZiBURUFMIGhhbmRsZSBpbml0aWFsIHByb2dyYW0gZmxvdwovLyBUaGlzIHBhdHRlcm4gaXMgdXNlZCB0byBtYWtlIGl0IGVhc3kgZm9yIGFueW9uZSB0byBwYXJzZSB0aGUgc3RhcnQgb2YgdGhlIHByb2dyYW0gYW5kIGRldGVybWluZSBpZiBhIHNwZWNpZmljIGFjdGlvbiBpcyBhbGxvd2VkCi8vIEhlcmUsIGFjdGlvbiByZWZlcnMgdG8gdGhlIE9uQ29tcGxldGUgaW4gY29tYmluYXRpb24gd2l0aCB3aGV0aGVyIHRoZSBhcHAgaXMgYmVpbmcgY3JlYXRlZCBvciBjYWxsZWQKLy8gRXZlcnkgcG9zc2libGUgYWN0aW9uIGZvciB0aGlzIGNvbnRyYWN0IGlzIHJlcHJlc2VudGVkIGluIHRoZSBzd2l0Y2ggc3RhdGVtZW50Ci8vIElmIHRoZSBhY3Rpb24gaXMgbm90IGltcGxlbWVudGVkIGluIHRoZSBjb250cmFjdCwgaXRzIHJlc3BlY3RpdmUgYnJhbmNoIHdpbGwgYmUgIipOT1RfSU1QTEVNRU5URUQiIHdoaWNoIGp1c3QgY29udGFpbnMgImVyciIKdHhuIEFwcGxpY2F0aW9uSUQKIQpwdXNoaW50IDYKKgp0eG4gT25Db21wbGV0aW9uCisKc3dpdGNoICpjYWxsX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpjcmVhdGVfTm9PcCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQKCipOT1RfSU1QTEVNRU5URUQ6CgkvLyBUaGUgcmVxdWVzdGVkIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhpcyBjb250cmFjdC4gQXJlIHlvdSB1c2luZyB0aGUgY29ycmVjdCBPbkNvbXBsZXRlPyBEaWQgeW91IHNldCB5b3VyIGFwcCBJRD8KCWVycgoKLy8gY3JlYXRlRW1wdHlCb3goKXZvaWQKKmFiaV9yb3V0ZV9jcmVhdGVFbXB0eUJveDoKCS8vIGV4ZWN1dGUgY3JlYXRlRW1wdHlCb3goKXZvaWQKCWNhbGxzdWIgY3JlYXRlRW1wdHlCb3gKCWludGMgMCAvLyAxCglyZXR1cm4KCi8vIGNyZWF0ZUVtcHR5Qm94KCk6IHZvaWQKY3JlYXRlRW1wdHlCb3g6Cglwcm90byAwIDAKCgkvLyB0ZXN0cy9leGFtcGxlLWNvbnRyYWN0cy9yZXNvdXJjZS1wYWNrZXIvcmVzb3VyY2UtcGFja2VyLmFsZ28udHM6NjEKCS8vIHRoaXMuZW1wdHlCb3guY3JlYXRlKCkKCXB1c2hieXRlcyAweDY1NmQ3MDc0Nzk0MjZmNzggLy8gImVtcHR5Qm94IgoJcHVzaGludCAwCglib3hfY3JlYXRlCglwb3AKCXJldHN1YgoKKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbjoKCWludGMgMCAvLyAxCglyZXR1cm4KCipjcmVhdGVfTm9PcDoKCXB1c2hieXRlcyAweGI4NDQ3YjM2IC8vIG1ldGhvZCAiY3JlYXRlQXBwbGljYXRpb24oKXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uCgoJLy8gdGhpcyBjb250cmFjdCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIGdpdmVuIEFCSSBtZXRob2QgZm9yIGNyZWF0ZSBOb09wCgllcnIKCipjYWxsX05vT3A6CglwdXNoYnl0ZXMgMHhhNjhiZDI5NyAvLyBtZXRob2QgImNyZWF0ZUVtcHR5Qm94KCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9jcmVhdGVFbXB0eUJveAoKCS8vIHRoaXMgY29udHJhY3QgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBnaXZlbiBBQkkgbWV0aG9kIGZvciBjYWxsIE5vT3AKCWVycg==", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCmludGNibG9jayAxCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjEwNi4zCi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hbGdvcmFuZGZvdW5kYXRpb24vVEVBTFNjcmlwdAoKLy8gVGhpcyBjb250cmFjdCBpcyBjb21wbGlhbnQgd2l0aCBhbmQvb3IgaW1wbGVtZW50cyB0aGUgZm9sbG93aW5nIEFSQ3M6IFsgQVJDNCBdCgovLyBUaGUgZm9sbG93aW5nIHRlbiBsaW5lcyBvZiBURUFMIGhhbmRsZSBpbml0aWFsIHByb2dyYW0gZmxvdwovLyBUaGlzIHBhdHRlcm4gaXMgdXNlZCB0byBtYWtlIGl0IGVhc3kgZm9yIGFueW9uZSB0byBwYXJzZSB0aGUgc3RhcnQgb2YgdGhlIHByb2dyYW0gYW5kIGRldGVybWluZSBpZiBhIHNwZWNpZmljIGFjdGlvbiBpcyBhbGxvd2VkCi8vIEhlcmUsIGFjdGlvbiByZWZlcnMgdG8gdGhlIE9uQ29tcGxldGUgaW4gY29tYmluYXRpb24gd2l0aCB3aGV0aGVyIHRoZSBhcHAgaXMgYmVpbmcgY3JlYXRlZCBvciBjYWxsZWQKLy8gRXZlcnkgcG9zc2libGUgYWN0aW9uIGZvciB0aGlzIGNvbnRyYWN0IGlzIHJlcHJlc2VudGVkIGluIHRoZSBzd2l0Y2ggc3RhdGVtZW50Ci8vIElmIHRoZSBhY3Rpb24gaXMgbm90IGltcGxlbWVudGVkIGluIHRoZSBjb250cmFjdCwgaXRzIHJlc3BlY3RpdmUgYnJhbmNoIHdpbGwgYmUgIipOT1RfSU1QTEVNRU5URUQiIHdoaWNoIGp1c3QgY29udGFpbnMgImVyciIKdHhuIEFwcGxpY2F0aW9uSUQKIQpwdXNoaW50IDYKKgp0eG4gT25Db21wbGV0aW9uCisKc3dpdGNoICpjYWxsX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpjcmVhdGVfTm9PcCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQKCipOT1RfSU1QTEVNRU5URUQ6CgkvLyBUaGUgcmVxdWVzdGVkIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhpcyBjb250cmFjdC4gQXJlIHlvdSB1c2luZyB0aGUgY29ycmVjdCBPbkNvbXBsZXRlPyBEaWQgeW91IHNldCB5b3VyIGFwcCBJRD8KCWVycgoKLy8gY3JlYXRlRW1wdHlCb3goKXZvaWQKKmFiaV9yb3V0ZV9jcmVhdGVFbXB0eUJveDoKCS8vIGV4ZWN1dGUgY3JlYXRlRW1wdHlCb3goKXZvaWQKCWNhbGxzdWIgY3JlYXRlRW1wdHlCb3gKCWludGMgMCAvLyAxCglyZXR1cm4KCi8vIGNyZWF0ZUVtcHR5Qm94KCk6IHZvaWQKY3JlYXRlRW1wdHlCb3g6Cglwcm90byAwIDAKCgkvLyByZXNvdXJjZS1wYWNrZXIuYWxnby50czo2MQoJLy8gdGhpcy5lbXB0eUJveC5jcmVhdGUoKQoJcHVzaGJ5dGVzIDB4NjU2ZDcwNzQ3OTQyNmY3OCAvLyAiZW1wdHlCb3giCglwdXNoaW50IDAKCWJveF9jcmVhdGUKCXBvcAoJcmV0c3ViCgoqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uOgoJaW50YyAwIC8vIDEKCXJldHVybgoKKmNyZWF0ZV9Ob09wOgoJcHVzaGJ5dGVzIDB4Yjg0NDdiMzYgLy8gbWV0aG9kICJjcmVhdGVBcHBsaWNhdGlvbigpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb24KCgkvLyB0aGlzIGNvbnRyYWN0IGRvZXMgbm90IGltcGxlbWVudCB0aGUgZ2l2ZW4gQUJJIG1ldGhvZCBmb3IgY3JlYXRlIE5vT3AKCWVycgoKKmNhbGxfTm9PcDoKCXB1c2hieXRlcyAweGE2OGJkMjk3IC8vIG1ldGhvZCAiY3JlYXRlRW1wdHlCb3goKXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX2NyZWF0ZUVtcHR5Qm94CgoJLy8gdGhpcyBjb250cmFjdCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIGdpdmVuIEFCSSBtZXRob2QgZm9yIGNhbGwgTm9PcAoJZXJy", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEw" }, "contract": { diff --git a/tests/example-contracts/resource-packer/artifacts/ResourcePackerv8.arc32.json b/tests/example-contracts/resource-packer/artifacts/ResourcePackerv8.arc32.json index 58f452ce..31011957 100644 --- a/tests/example-contracts/resource-packer/artifacts/ResourcePackerv8.arc32.json +++ b/tests/example-contracts/resource-packer/artifacts/ResourcePackerv8.arc32.json @@ -83,7 +83,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDgKaW50Y2Jsb2NrIDEgMCA2IDMyCmJ5dGVjYmxvY2sgMHg2NTc4NzQ2NTcyNmU2MTZjNDE3MDcwNDk0NCAweDYxNzM2MSAweGI4NDQ3YjM2IDB4NzMKCi8vIFRoaXMgVEVBTCB3YXMgZ2VuZXJhdGVkIGJ5IFRFQUxTY3JpcHQgdjAuMTA2LjMKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludGMgMiAvLyA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJLy8gVGhlIHJlcXVlc3RlZCBhY3Rpb24gaXMgbm90IGltcGxlbWVudGVkIGluIHRoaXMgY29udHJhY3QuIEFyZSB5b3UgdXNpbmcgdGhlIGNvcnJlY3QgT25Db21wbGV0ZT8gRGlkIHlvdSBzZXQgeW91ciBhcHAgSUQ/CgllcnIKCi8vIGJvb3RzdHJhcCgpdm9pZAoqYWJpX3JvdXRlX2Jvb3RzdHJhcDoKCS8vIGV4ZWN1dGUgYm9vdHN0cmFwKCl2b2lkCgljYWxsc3ViIGJvb3RzdHJhcAoJaW50YyAwIC8vIDEKCXJldHVybgoKLy8gYm9vdHN0cmFwKCk6IHZvaWQKYm9vdHN0cmFwOgoJcHJvdG8gMCAwCgoJLy8gdGVzdHMvZXhhbXBsZS1jb250cmFjdHMvcmVzb3VyY2UtcGFja2VyL3Jlc291cmNlLXBhY2tlci5hbGdvLnRzOjc4CgkvLyBzZW5kTWV0aG9kQ2FsbDxbXSwgdm9pZD4oewoJLy8gICAgICAgbmFtZTogJ2NyZWF0ZUFwcGxpY2F0aW9uJywKCS8vICAgICAgIGFwcHJvdmFsUHJvZ3JhbTogRXh0ZXJuYWxBcHAuYXBwcm92YWxQcm9ncmFtKCksCgkvLyAgICAgICBjbGVhclN0YXRlUHJvZ3JhbTogRXh0ZXJuYWxBcHAuY2xlYXJQcm9ncmFtKCksCgkvLyAgICAgICBsb2NhbE51bUJ5dGVTbGljZTogRXh0ZXJuYWxBcHAuc2NoZW1hLmxvY2FsLm51bUJ5dGVTbGljZSwKCS8vICAgICAgIGdsb2JhbE51bUJ5dGVTbGljZTogRXh0ZXJuYWxBcHAuc2NoZW1hLmdsb2JhbC5udW1CeXRlU2xpY2UsCgkvLyAgICAgICBnbG9iYWxOdW1VaW50OiBFeHRlcm5hbEFwcC5zY2hlbWEuZ2xvYmFsLm51bVVpbnQsCgkvLyAgICAgICBsb2NhbE51bVVpbnQ6IEV4dGVybmFsQXBwLnNjaGVtYS5sb2NhbC5udW1VaW50LAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnRjIDIgLy8gIGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCWJ5dGVjIDIgLy8gIG1ldGhvZCAiY3JlYXRlQXBwbGljYXRpb24oKXZvaWQiCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIHRlc3RzL2V4YW1wbGUtY29udHJhY3RzL3Jlc291cmNlLXBhY2tlci9yZXNvdXJjZS1wYWNrZXIuYWxnby50czo4MAoJLy8gYXBwcm92YWxQcm9ncmFtOiBFeHRlcm5hbEFwcC5hcHByb3ZhbFByb2dyYW0oKQoJcHVzaGJ5dGVzIDB4MGEyMDAzMDEwMDA2MjYwNTA2NjI2Zjc4NGI2NTc5MDRiODQ0N2IzNjAzNjY2ZjZmMDM2MTczNjEwMDMxMTgxNDI0MGIzMTE5MDg4ZDBjMDEzYjAxNzEwMDAwMDAwMDAwMDAwMDAwMDEzMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4ODAwMDIyMjQzOGEwMDAwMzEwMDgwMDg2YzZmNjM2MTZjNGI2NTc5MmE2Njg5ODgwMDAyMjI0MzhhMDAwMDg5ODgwMDAyMjI0MzhhMDAwMDAwODkzMTE2MjIwOTQ5MzgxMDIyMTI0NDg4MDAwMjIyNDM4YTAxMDAyODQ5YmM0ODJhYmY4OTg4MDAwMjIyNDM4YTAwMDAyYmIxODEwM2IyMTAyMmIyMjIyM2IyMDFiM2I0M2M2Nzg5ODgwMDAyMjI0MzhhMDAwMDMxMDAyYjY0NzAwMDRjNDgxNDQ0ODkzMTE2MjIwOTQ5MzgxMDIyMTI0NDg4MDAwMjIyNDM4YTAxMDAyNzA0NDk4YmZmMzgwNzMyMGExMjQ0YjEyNGIyMTAyOWIyMWE4MDVkMGEyMDAxMDEzMTE4MTQ4MTA2MGIzMTE5MDg4ZDBjMDAyODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxYTAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4ODAwMDIyMjQzOGEwMDAwODAwODY1NmQ3MDc0Nzk0MjZmNzg4MTAwYjk0ODg5MjI0MzgwMDRiODQ0N2IzNjM2MWEwMDhlMDFmZmYxMDA4MDA0YTY4YmQyOTczNjFhMDA4ZTAxZmZjYzAwYjIxZTgwMDEwYWIyMWYyM2IyMDFiM2I0M2Q4YzAwOGIwMDcyMDg0ODhjMDFiMTIyYjIxMDhiMDFiMjA3OGJmZjM4MDhiMjA4MjNiMjAxYjNiMTI0YjIxMDgwMDRhNjhiZDI5N2IyMWE4YjAwYjIxODIzYjIwMWIzODkyMjQzMjkzNjFhMDA4ZTAxZmZmNjAwODAwNGEzMGNlN2ZmODAwNDQ0ZDBkYTBkODAwNGQ2MWU0MjU1ODAwNGE2NWFhYmZlODAwNDY1NWM1ZTAyODAwNDFhNDU2YWNhMzYxYTAwOGUwNmZlYThmZWIxZmViYmZlZDRmZWVkZmYwMDAwODAwNDAxYTNhM2ZmMzYxYTAwOGUwMWZlODMwMAoJaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW0KCgkvLyB0ZXN0cy9leGFtcGxlLWNvbnRyYWN0cy9yZXNvdXJjZS1wYWNrZXIvcmVzb3VyY2UtcGFja2VyLmFsZ28udHM6ODEKCS8vIGNsZWFyU3RhdGVQcm9ncmFtOiBFeHRlcm5hbEFwcC5jbGVhclByb2dyYW0oKQoJcHVzaGJ5dGVzIDB4MGEKCWl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KCgkvLyB0ZXN0cy9leGFtcGxlLWNvbnRyYWN0cy9yZXNvdXJjZS1wYWNrZXIvcmVzb3VyY2UtcGFja2VyLmFsZ28udHM6ODIKCS8vIGxvY2FsTnVtQnl0ZVNsaWNlOiBFeHRlcm5hbEFwcC5zY2hlbWEubG9jYWwubnVtQnl0ZVNsaWNlCglpbnRjIDAgLy8gMQoJaXR4bl9maWVsZCBMb2NhbE51bUJ5dGVTbGljZQoKCS8vIHRlc3RzL2V4YW1wbGUtY29udHJhY3RzL3Jlc291cmNlLXBhY2tlci9yZXNvdXJjZS1wYWNrZXIuYWxnby50czo4MwoJLy8gZ2xvYmFsTnVtQnl0ZVNsaWNlOiBFeHRlcm5hbEFwcC5zY2hlbWEuZ2xvYmFsLm51bUJ5dGVTbGljZQoJaW50YyAxIC8vIDAKCWl0eG5fZmllbGQgR2xvYmFsTnVtQnl0ZVNsaWNlCgoJLy8gdGVzdHMvZXhhbXBsZS1jb250cmFjdHMvcmVzb3VyY2UtcGFja2VyL3Jlc291cmNlLXBhY2tlci5hbGdvLnRzOjg0CgkvLyBnbG9iYWxOdW1VaW50OiBFeHRlcm5hbEFwcC5zY2hlbWEuZ2xvYmFsLm51bVVpbnQKCWludGMgMCAvLyAxCglpdHhuX2ZpZWxkIEdsb2JhbE51bVVpbnQKCgkvLyB0ZXN0cy9leGFtcGxlLWNvbnRyYWN0cy9yZXNvdXJjZS1wYWNrZXIvcmVzb3VyY2UtcGFja2VyLmFsZ28udHM6ODUKCS8vIGxvY2FsTnVtVWludDogRXh0ZXJuYWxBcHAuc2NoZW1hLmxvY2FsLm51bVVpbnQKCWludGMgMSAvLyAwCglpdHhuX2ZpZWxkIExvY2FsTnVtVWludAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludGMgMSAvLyAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyB0ZXN0cy9leGFtcGxlLWNvbnRyYWN0cy9yZXNvdXJjZS1wYWNrZXIvcmVzb3VyY2UtcGFja2VyLmFsZ28udHM6ODgKCS8vIHRoaXMuZXh0ZXJuYWxBcHBJRC52YWx1ZSA9IHRoaXMuaXR4bi5jcmVhdGVkQXBwbGljYXRpb25JRAoJYnl0ZWMgMCAvLyAgImV4dGVybmFsQXBwSUQiCglpdHhuIENyZWF0ZWRBcHBsaWNhdGlvbklECglhcHBfZ2xvYmFsX3B1dAoKCS8vIHRlc3RzL2V4YW1wbGUtY29udHJhY3RzL3Jlc291cmNlLXBhY2tlci9yZXNvdXJjZS1wYWNrZXIuYWxnby50czo5MAoJLy8gdGhpcy5hc2EudmFsdWUgPSBzZW5kQXNzZXRDcmVhdGlvbih7CgkvLyAgICAgICBjb25maWdBc3NldFRvdGFsOiAxLAoJLy8gICAgIH0pCglieXRlYyAxIC8vICAiYXNhIgoJaXR4bl9iZWdpbgoJcHVzaGludCAzIC8vIGFjZmcKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyB0ZXN0cy9leGFtcGxlLWNvbnRyYWN0cy9yZXNvdXJjZS1wYWNrZXIvcmVzb3VyY2UtcGFja2VyLmFsZ28udHM6OTEKCS8vIGNvbmZpZ0Fzc2V0VG90YWw6IDEKCWludGMgMCAvLyAxCglpdHhuX2ZpZWxkIENvbmZpZ0Fzc2V0VG90YWwKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnRjIDEgLy8gMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglpdHhuIENyZWF0ZWRBc3NldElECglhcHBfZ2xvYmFsX3B1dAoJcmV0c3ViCgovLyBhZGRyZXNzQmFsYW5jZShhZGRyZXNzKXZvaWQKKmFiaV9yb3V0ZV9hZGRyZXNzQmFsYW5jZToKCS8vIGFkZHI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnRjIDMgLy8gMzIKCT09CgoJLy8gYXJndW1lbnQgMCAoYWRkcikgZm9yIGFkZHJlc3NCYWxhbmNlIG11c3QgYmUgYSBhZGRyZXNzCglhc3NlcnQKCgkvLyBleGVjdXRlIGFkZHJlc3NCYWxhbmNlKGFkZHJlc3Mpdm9pZAoJY2FsbHN1YiBhZGRyZXNzQmFsYW5jZQoJaW50YyAwIC8vIDEKCXJldHVybgoKLy8gYWRkcmVzc0JhbGFuY2UoYWRkcjogQWRkcmVzcyk6IHZvaWQKYWRkcmVzc0JhbGFuY2U6Cglwcm90byAxIDAKCgkvLyB0ZXN0cy9leGFtcGxlLWNvbnRyYWN0cy9yZXNvdXJjZS1wYWNrZXIvcmVzb3VyY2UtcGFja2VyLmFsZ28udHM6OTYKCS8vIGxvZyhyYXdCeXRlcyhhZGRyLmlzSW5MZWRnZXIpKQoJZnJhbWVfZGlnIC0xIC8vIGFkZHI6IEFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJc3dhcAoJcG9wCglwdXNoYnl0ZXMgMHgwMAoJaW50YyAxIC8vIDAKCXVuY292ZXIgMgoJc2V0Yml0Cglsb2cKCXJldHN1YgoKLy8gc21hbGxCb3goKXZvaWQKKmFiaV9yb3V0ZV9zbWFsbEJveDoKCS8vIGV4ZWN1dGUgc21hbGxCb3goKXZvaWQKCWNhbGxzdWIgc21hbGxCb3gKCWludGMgMCAvLyAxCglyZXR1cm4KCi8vIHNtYWxsQm94KCk6IHZvaWQKc21hbGxCb3g6Cglwcm90byAwIDAKCgkvLyB0ZXN0cy9leGFtcGxlLWNvbnRyYWN0cy9yZXNvdXJjZS1wYWNrZXIvcmVzb3VyY2UtcGFja2VyLmFsZ28udHM6MTAwCgkvLyB0aGlzLnNtYWxsQm94S2V5LnZhbHVlID0gJycKCWJ5dGVjIDMgLy8gICJzIgoJZHVwCglib3hfZGVsCglwb3AKCXB1c2hieXRlcyAweCAvLyAiIgoJYm94X3B1dAoJcmV0c3ViCgovLyBtZWRpdW1Cb3goKXZvaWQKKmFiaV9yb3V0ZV9tZWRpdW1Cb3g6CgkvLyBleGVjdXRlIG1lZGl1bUJveCgpdm9pZAoJY2FsbHN1YiBtZWRpdW1Cb3gKCWludGMgMCAvLyAxCglyZXR1cm4KCi8vIG1lZGl1bUJveCgpOiB2b2lkCm1lZGl1bUJveDoKCXByb3RvIDAgMAoKCS8vIHRlc3RzL2V4YW1wbGUtY29udHJhY3RzL3Jlc291cmNlLXBhY2tlci9yZXNvdXJjZS1wYWNrZXIuYWxnby50czoxMDQKCS8vIHRoaXMubWVkaXVtQm94S2V5LmNyZWF0ZSg1XzAwMCkKCXB1c2hieXRlcyAweDZkIC8vICJtIgoJcHVzaGludCA1XzAwMAoJYm94X2NyZWF0ZQoJcG9wCglyZXRzdWIKCi8vIGV4dGVybmFsQXBwQ2FsbCgpdm9pZAoqYWJpX3JvdXRlX2V4dGVybmFsQXBwQ2FsbDoKCS8vIGV4ZWN1dGUgZXh0ZXJuYWxBcHBDYWxsKCl2b2lkCgljYWxsc3ViIGV4dGVybmFsQXBwQ2FsbAoJaW50YyAwIC8vIDEKCXJldHVybgoKLy8gZXh0ZXJuYWxBcHBDYWxsKCk6IHZvaWQKZXh0ZXJuYWxBcHBDYWxsOgoJcHJvdG8gMCAwCgoJLy8gdGVzdHMvZXhhbXBsZS1jb250cmFjdHMvcmVzb3VyY2UtcGFja2VyL3Jlc291cmNlLXBhY2tlci5hbGdvLnRzOjEwOAoJLy8gc2VuZE1ldGhvZENhbGw8W10sIHZvaWQ+KHsKCS8vICAgICAgIGFwcGxpY2F0aW9uSUQ6IHRoaXMuZXh0ZXJuYWxBcHBJRC52YWx1ZSwKCS8vICAgICAgIG5hbWU6ICdkdW1teScsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludGMgMiAvLyAgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoJcHVzaGJ5dGVzIDB4YTMwY2U3ZmYgLy8gbWV0aG9kICJkdW1teSgpdm9pZCIKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCgoJLy8gdGVzdHMvZXhhbXBsZS1jb250cmFjdHMvcmVzb3VyY2UtcGFja2VyL3Jlc291cmNlLXBhY2tlci5hbGdvLnRzOjEwOQoJLy8gYXBwbGljYXRpb25JRDogdGhpcy5leHRlcm5hbEFwcElELnZhbHVlCglieXRlYyAwIC8vICAiZXh0ZXJuYWxBcHBJRCIKCWFwcF9nbG9iYWxfZ2V0CglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnRjIDEgLy8gMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGFzc2V0VG90YWwoKXZvaWQKKmFiaV9yb3V0ZV9hc3NldFRvdGFsOgoJLy8gZXhlY3V0ZSBhc3NldFRvdGFsKCl2b2lkCgljYWxsc3ViIGFzc2V0VG90YWwKCWludGMgMCAvLyAxCglyZXR1cm4KCi8vIGFzc2V0VG90YWwoKTogdm9pZAphc3NldFRvdGFsOgoJcHJvdG8gMCAwCgoJLy8gdGVzdHMvZXhhbXBsZS1jb250cmFjdHMvcmVzb3VyY2UtcGFja2VyL3Jlc291cmNlLXBhY2tlci5hbGdvLnRzOjExNQoJLy8gYXNzZXJ0KHRoaXMuYXNhLnZhbHVlLnRvdGFsKQoJYnl0ZWMgMSAvLyAgImFzYSIKCWFwcF9nbG9iYWxfZ2V0Cglhc3NldF9wYXJhbXNfZ2V0IEFzc2V0VG90YWwKCXBvcAoJYXNzZXJ0CglyZXRzdWIKCi8vIGhhc0Fzc2V0KGFkZHJlc3Mpdm9pZAoqYWJpX3JvdXRlX2hhc0Fzc2V0OgoJLy8gYWRkcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludGMgMyAvLyAzMgoJPT0KCgkvLyBhcmd1bWVudCAwIChhZGRyKSBmb3IgaGFzQXNzZXQgbXVzdCBiZSBhIGFkZHJlc3MKCWFzc2VydAoKCS8vIGV4ZWN1dGUgaGFzQXNzZXQoYWRkcmVzcyl2b2lkCgljYWxsc3ViIGhhc0Fzc2V0CglpbnRjIDAgLy8gMQoJcmV0dXJuCgovLyBoYXNBc3NldChhZGRyOiBBZGRyZXNzKTogdm9pZApoYXNBc3NldDoKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2V4YW1wbGUtY29udHJhY3RzL3Jlc291cmNlLXBhY2tlci9yZXNvdXJjZS1wYWNrZXIuYWxnby50czoxMTkKCS8vIGFzc2VydCghYWRkci5pc09wdGVkSW5Ub0Fzc2V0KHRoaXMuYXNhLnZhbHVlKSkKCWZyYW1lX2RpZyAtMSAvLyBhZGRyOiBBZGRyZXNzCglieXRlYyAxIC8vICAiYXNhIgoJYXBwX2dsb2JhbF9nZXQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJc3dhcAoJcG9wCgkhCglhc3NlcnQKCXJldHN1YgoKLy8gZXh0ZXJuYWxMb2NhbChhZGRyZXNzKXZvaWQKKmFiaV9yb3V0ZV9leHRlcm5hbExvY2FsOgoJLy8gYWRkcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludGMgMyAvLyAzMgoJPT0KCgkvLyBhcmd1bWVudCAwIChhZGRyKSBmb3IgZXh0ZXJuYWxMb2NhbCBtdXN0IGJlIGEgYWRkcmVzcwoJYXNzZXJ0CgoJLy8gZXhlY3V0ZSBleHRlcm5hbExvY2FsKGFkZHJlc3Mpdm9pZAoJY2FsbHN1YiBleHRlcm5hbExvY2FsCglpbnRjIDAgLy8gMQoJcmV0dXJuCgovLyBleHRlcm5hbExvY2FsKGFkZHI6IEFkZHJlc3MpOiB2b2lkCmV4dGVybmFsTG9jYWw6Cglwcm90byAxIDAKCgkvLyB0ZXN0cy9leGFtcGxlLWNvbnRyYWN0cy9yZXNvdXJjZS1wYWNrZXIvcmVzb3VyY2UtcGFja2VyLmFsZ28udHM6MTIzCgkvLyBsb2codGhpcy5leHRlcm5hbEFwcElELnZhbHVlLmxvY2FsU3RhdGUoYWRkciwgJ2xvY2FsS2V5JykgYXMgYnl0ZXMpCglieXRlYyAwIC8vICAiZXh0ZXJuYWxBcHBJRCIKCWFwcF9nbG9iYWxfZ2V0CglwdXNoYnl0ZXMgMHg2YzZmNjM2MTZjNGI2NTc5IC8vICJsb2NhbEtleSIKCWZyYW1lX2RpZyAtMSAvLyBhZGRyOiBBZGRyZXNzCgljb3ZlciAyCglhcHBfbG9jYWxfZ2V0X2V4CgoJLy8gbG9jYWwgc3RhdGUgdmFsdWUgZG9lcyBub3QgZXhpc3Q6IHRoaXMuZXh0ZXJuYWxBcHBJRC52YWx1ZS5sb2NhbFN0YXRlKGFkZHIsICdsb2NhbEtleScpCglhc3NlcnQKCWxvZwoJcmV0c3ViCgoqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uOgoJaW50YyAwIC8vIDEKCXJldHVybgoKKmNyZWF0ZV9Ob09wOgoJYnl0ZWMgMiAvLyAgbWV0aG9kICJjcmVhdGVBcHBsaWNhdGlvbigpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb24KCgkvLyB0aGlzIGNvbnRyYWN0IGRvZXMgbm90IGltcGxlbWVudCB0aGUgZ2l2ZW4gQUJJIG1ldGhvZCBmb3IgY3JlYXRlIE5vT3AKCWVycgoKKmNhbGxfTm9PcDoKCXB1c2hieXRlcyAweGJlYzc2ZDg3IC8vIG1ldGhvZCAiYm9vdHN0cmFwKCl2b2lkIgoJcHVzaGJ5dGVzIDB4MjZkYjlkYjcgLy8gbWV0aG9kICJhZGRyZXNzQmFsYW5jZShhZGRyZXNzKXZvaWQiCglwdXNoYnl0ZXMgMHgzMDllZTA3MyAvLyBtZXRob2QgInNtYWxsQm94KCl2b2lkIgoJcHVzaGJ5dGVzIDB4YjU2NjhlMTcgLy8gbWV0aG9kICJtZWRpdW1Cb3goKXZvaWQiCglwdXNoYnl0ZXMgMHhhOWQ4MzVlMCAvLyBtZXRob2QgImV4dGVybmFsQXBwQ2FsbCgpdm9pZCIKCXB1c2hieXRlcyAweDIxMTYyNGEwIC8vIG1ldGhvZCAiYXNzZXRUb3RhbCgpdm9pZCIKCXB1c2hieXRlcyAweGFhMzhhZTkxIC8vIG1ldGhvZCAiaGFzQXNzZXQoYWRkcmVzcyl2b2lkIgoJcHVzaGJ5dGVzIDB4MjRkMWQwMTMgLy8gbWV0aG9kICJleHRlcm5hbExvY2FsKGFkZHJlc3Mpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfYm9vdHN0cmFwICphYmlfcm91dGVfYWRkcmVzc0JhbGFuY2UgKmFiaV9yb3V0ZV9zbWFsbEJveCAqYWJpX3JvdXRlX21lZGl1bUJveCAqYWJpX3JvdXRlX2V4dGVybmFsQXBwQ2FsbCAqYWJpX3JvdXRlX2Fzc2V0VG90YWwgKmFiaV9yb3V0ZV9oYXNBc3NldCAqYWJpX3JvdXRlX2V4dGVybmFsTG9jYWwKCgkvLyB0aGlzIGNvbnRyYWN0IGRvZXMgbm90IGltcGxlbWVudCB0aGUgZ2l2ZW4gQUJJIG1ldGhvZCBmb3IgY2FsbCBOb09wCgllcnI=", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDgKaW50Y2Jsb2NrIDEgMCA2IDMyCmJ5dGVjYmxvY2sgMHg2NTc4NzQ2NTcyNmU2MTZjNDE3MDcwNDk0NCAweDYxNzM2MSAweGI4NDQ3YjM2IDB4NzMKCi8vIFRoaXMgVEVBTCB3YXMgZ2VuZXJhdGVkIGJ5IFRFQUxTY3JpcHQgdjAuMTA2LjMKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludGMgMiAvLyA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJLy8gVGhlIHJlcXVlc3RlZCBhY3Rpb24gaXMgbm90IGltcGxlbWVudGVkIGluIHRoaXMgY29udHJhY3QuIEFyZSB5b3UgdXNpbmcgdGhlIGNvcnJlY3QgT25Db21wbGV0ZT8gRGlkIHlvdSBzZXQgeW91ciBhcHAgSUQ/CgllcnIKCi8vIGJvb3RzdHJhcCgpdm9pZAoqYWJpX3JvdXRlX2Jvb3RzdHJhcDoKCS8vIGV4ZWN1dGUgYm9vdHN0cmFwKCl2b2lkCgljYWxsc3ViIGJvb3RzdHJhcAoJaW50YyAwIC8vIDEKCXJldHVybgoKLy8gYm9vdHN0cmFwKCk6IHZvaWQKYm9vdHN0cmFwOgoJcHJvdG8gMCAwCgoJLy8gcmVzb3VyY2UtcGFja2VyLmFsZ28udHM6NzgKCS8vIHNlbmRNZXRob2RDYWxsPFtdLCB2b2lkPih7CgkvLyAgICAgICBuYW1lOiAnY3JlYXRlQXBwbGljYXRpb24nLAoJLy8gICAgICAgYXBwcm92YWxQcm9ncmFtOiBFeHRlcm5hbEFwcC5hcHByb3ZhbFByb2dyYW0oKSwKCS8vICAgICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBFeHRlcm5hbEFwcC5jbGVhclByb2dyYW0oKSwKCS8vICAgICAgIGxvY2FsTnVtQnl0ZVNsaWNlOiBFeHRlcm5hbEFwcC5zY2hlbWEubG9jYWwubnVtQnl0ZVNsaWNlLAoJLy8gICAgICAgZ2xvYmFsTnVtQnl0ZVNsaWNlOiBFeHRlcm5hbEFwcC5zY2hlbWEuZ2xvYmFsLm51bUJ5dGVTbGljZSwKCS8vICAgICAgIGdsb2JhbE51bVVpbnQ6IEV4dGVybmFsQXBwLnNjaGVtYS5nbG9iYWwubnVtVWludCwKCS8vICAgICAgIGxvY2FsTnVtVWludDogRXh0ZXJuYWxBcHAuc2NoZW1hLmxvY2FsLm51bVVpbnQsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludGMgMiAvLyAgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoJYnl0ZWMgMiAvLyAgbWV0aG9kICJjcmVhdGVBcHBsaWNhdGlvbigpdm9pZCIKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCgoJLy8gcmVzb3VyY2UtcGFja2VyLmFsZ28udHM6ODAKCS8vIGFwcHJvdmFsUHJvZ3JhbTogRXh0ZXJuYWxBcHAuYXBwcm92YWxQcm9ncmFtKCkKCXB1c2hieXRlcyAweDBhMjAwMzAxMDAwNjI2MDUwNjYyNmY3ODRiNjU3OTA0Yjg0NDdiMzYwMzY2NmY2ZjAzNjE3MzYxMDAzMTE4MTQyNDBiMzExOTA4OGQwYzAxM2IwMTcxMDAwMDAwMDAwMDAwMDAwMDAxMzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODgwMDAyMjI0MzhhMDAwMDMxMDA4MDA4NmM2ZjYzNjE2YzRiNjU3OTJhNjY4OTg4MDAwMjIyNDM4YTAwMDA4OTg4MDAwMjIyNDM4YTAwMDAwMDg5MzExNjIyMDk0OTM4MTAyMjEyNDQ4ODAwMDIyMjQzOGEwMTAwMjg0OWJjNDgyYWJmODk4ODAwMDIyMjQzOGEwMDAwMmJiMTgxMDNiMjEwMjJiMjIyMjNiMjAxYjNiNDNjNjc4OTg4MDAwMjIyNDM4YTAwMDAzMTAwMmI2NDcwMDA0YzQ4MTQ0NDg5MzExNjIyMDk0OTM4MTAyMjEyNDQ4ODAwMDIyMjQzOGEwMTAwMjcwNDQ5OGJmZjM4MDczMjBhMTI0NGIxMjRiMjEwMjliMjFhODA1ZDBhMjAwMTAxMzExODE0ODEwNjBiMzExOTA4OGQwYzAwMjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMWEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODgwMDAyMjI0MzhhMDAwMDgwMDg2NTZkNzA3NDc5NDI2Zjc4ODEwMGI5NDg4OTIyNDM4MDA0Yjg0NDdiMzYzNjFhMDA4ZTAxZmZmMTAwODAwNGE2OGJkMjk3MzYxYTAwOGUwMWZmY2MwMGIyMWU4MDAxMGFiMjFmMjNiMjAxYjNiNDNkOGMwMDhiMDA3MjA4NDg4YzAxYjEyMmIyMTA4YjAxYjIwNzhiZmYzODA4YjIwODIzYjIwMWIzYjEyNGIyMTA4MDA0YTY4YmQyOTdiMjFhOGIwMGIyMTgyM2IyMDFiMzg5MjI0MzI5MzYxYTAwOGUwMWZmZjYwMDgwMDRhMzBjZTdmZjgwMDQ0NGQwZGEwZDgwMDRkNjFlNDI1NTgwMDRhNjVhYWJmZTgwMDQ2NTVjNWUwMjgwMDQxYTQ1NmFjYTM2MWEwMDhlMDZmZWE4ZmViMWZlYmJmZWQ0ZmVlZGZmMDAwMDgwMDQwMWEzYTNmZjM2MWEwMDhlMDFmZTgzMDAKCWl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtCgoJLy8gcmVzb3VyY2UtcGFja2VyLmFsZ28udHM6ODEKCS8vIGNsZWFyU3RhdGVQcm9ncmFtOiBFeHRlcm5hbEFwcC5jbGVhclByb2dyYW0oKQoJcHVzaGJ5dGVzIDB4MGEKCWl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KCgkvLyByZXNvdXJjZS1wYWNrZXIuYWxnby50czo4MgoJLy8gbG9jYWxOdW1CeXRlU2xpY2U6IEV4dGVybmFsQXBwLnNjaGVtYS5sb2NhbC5udW1CeXRlU2xpY2UKCWludGMgMCAvLyAxCglpdHhuX2ZpZWxkIExvY2FsTnVtQnl0ZVNsaWNlCgoJLy8gcmVzb3VyY2UtcGFja2VyLmFsZ28udHM6ODMKCS8vIGdsb2JhbE51bUJ5dGVTbGljZTogRXh0ZXJuYWxBcHAuc2NoZW1hLmdsb2JhbC5udW1CeXRlU2xpY2UKCWludGMgMSAvLyAwCglpdHhuX2ZpZWxkIEdsb2JhbE51bUJ5dGVTbGljZQoKCS8vIHJlc291cmNlLXBhY2tlci5hbGdvLnRzOjg0CgkvLyBnbG9iYWxOdW1VaW50OiBFeHRlcm5hbEFwcC5zY2hlbWEuZ2xvYmFsLm51bVVpbnQKCWludGMgMCAvLyAxCglpdHhuX2ZpZWxkIEdsb2JhbE51bVVpbnQKCgkvLyByZXNvdXJjZS1wYWNrZXIuYWxnby50czo4NQoJLy8gbG9jYWxOdW1VaW50OiBFeHRlcm5hbEFwcC5zY2hlbWEubG9jYWwubnVtVWludAoJaW50YyAxIC8vIDAKCWl0eG5fZmllbGQgTG9jYWxOdW1VaW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50YyAxIC8vIDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vIHJlc291cmNlLXBhY2tlci5hbGdvLnRzOjg4CgkvLyB0aGlzLmV4dGVybmFsQXBwSUQudmFsdWUgPSB0aGlzLml0eG4uY3JlYXRlZEFwcGxpY2F0aW9uSUQKCWJ5dGVjIDAgLy8gICJleHRlcm5hbEFwcElEIgoJaXR4biBDcmVhdGVkQXBwbGljYXRpb25JRAoJYXBwX2dsb2JhbF9wdXQKCgkvLyByZXNvdXJjZS1wYWNrZXIuYWxnby50czo5MAoJLy8gdGhpcy5hc2EudmFsdWUgPSBzZW5kQXNzZXRDcmVhdGlvbih7CgkvLyAgICAgICBjb25maWdBc3NldFRvdGFsOiAxLAoJLy8gICAgIH0pCglieXRlYyAxIC8vICAiYXNhIgoJaXR4bl9iZWdpbgoJcHVzaGludCAzIC8vIGFjZmcKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyByZXNvdXJjZS1wYWNrZXIuYWxnby50czo5MQoJLy8gY29uZmlnQXNzZXRUb3RhbDogMQoJaW50YyAwIC8vIDEKCWl0eG5fZmllbGQgQ29uZmlnQXNzZXRUb3RhbAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludGMgMSAvLyAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCWl0eG4gQ3JlYXRlZEFzc2V0SUQKCWFwcF9nbG9iYWxfcHV0CglyZXRzdWIKCi8vIGFkZHJlc3NCYWxhbmNlKGFkZHJlc3Mpdm9pZAoqYWJpX3JvdXRlX2FkZHJlc3NCYWxhbmNlOgoJLy8gYWRkcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludGMgMyAvLyAzMgoJPT0KCgkvLyBhcmd1bWVudCAwIChhZGRyKSBmb3IgYWRkcmVzc0JhbGFuY2UgbXVzdCBiZSBhIGFkZHJlc3MKCWFzc2VydAoKCS8vIGV4ZWN1dGUgYWRkcmVzc0JhbGFuY2UoYWRkcmVzcyl2b2lkCgljYWxsc3ViIGFkZHJlc3NCYWxhbmNlCglpbnRjIDAgLy8gMQoJcmV0dXJuCgovLyBhZGRyZXNzQmFsYW5jZShhZGRyOiBBZGRyZXNzKTogdm9pZAphZGRyZXNzQmFsYW5jZToKCXByb3RvIDEgMAoKCS8vIHJlc291cmNlLXBhY2tlci5hbGdvLnRzOjk2CgkvLyBsb2cocmF3Qnl0ZXMoYWRkci5pc0luTGVkZ2VyKSkKCWZyYW1lX2RpZyAtMSAvLyBhZGRyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXN3YXAKCXBvcAoJcHVzaGJ5dGVzIDB4MDAKCWludGMgMSAvLyAwCgl1bmNvdmVyIDIKCXNldGJpdAoJbG9nCglyZXRzdWIKCi8vIHNtYWxsQm94KCl2b2lkCiphYmlfcm91dGVfc21hbGxCb3g6CgkvLyBleGVjdXRlIHNtYWxsQm94KCl2b2lkCgljYWxsc3ViIHNtYWxsQm94CglpbnRjIDAgLy8gMQoJcmV0dXJuCgovLyBzbWFsbEJveCgpOiB2b2lkCnNtYWxsQm94OgoJcHJvdG8gMCAwCgoJLy8gcmVzb3VyY2UtcGFja2VyLmFsZ28udHM6MTAwCgkvLyB0aGlzLnNtYWxsQm94S2V5LnZhbHVlID0gJycKCWJ5dGVjIDMgLy8gICJzIgoJZHVwCglib3hfZGVsCglwb3AKCXB1c2hieXRlcyAweCAvLyAiIgoJYm94X3B1dAoJcmV0c3ViCgovLyBtZWRpdW1Cb3goKXZvaWQKKmFiaV9yb3V0ZV9tZWRpdW1Cb3g6CgkvLyBleGVjdXRlIG1lZGl1bUJveCgpdm9pZAoJY2FsbHN1YiBtZWRpdW1Cb3gKCWludGMgMCAvLyAxCglyZXR1cm4KCi8vIG1lZGl1bUJveCgpOiB2b2lkCm1lZGl1bUJveDoKCXByb3RvIDAgMAoKCS8vIHJlc291cmNlLXBhY2tlci5hbGdvLnRzOjEwNAoJLy8gdGhpcy5tZWRpdW1Cb3hLZXkuY3JlYXRlKDVfMDAwKQoJcHVzaGJ5dGVzIDB4NmQgLy8gIm0iCglwdXNoaW50IDVfMDAwCglib3hfY3JlYXRlCglwb3AKCXJldHN1YgoKLy8gZXh0ZXJuYWxBcHBDYWxsKCl2b2lkCiphYmlfcm91dGVfZXh0ZXJuYWxBcHBDYWxsOgoJLy8gZXhlY3V0ZSBleHRlcm5hbEFwcENhbGwoKXZvaWQKCWNhbGxzdWIgZXh0ZXJuYWxBcHBDYWxsCglpbnRjIDAgLy8gMQoJcmV0dXJuCgovLyBleHRlcm5hbEFwcENhbGwoKTogdm9pZApleHRlcm5hbEFwcENhbGw6Cglwcm90byAwIDAKCgkvLyByZXNvdXJjZS1wYWNrZXIuYWxnby50czoxMDgKCS8vIHNlbmRNZXRob2RDYWxsPFtdLCB2b2lkPih7CgkvLyAgICAgICBhcHBsaWNhdGlvbklEOiB0aGlzLmV4dGVybmFsQXBwSUQudmFsdWUsCgkvLyAgICAgICBuYW1lOiAnZHVtbXknLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnRjIDIgLy8gIGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCXB1c2hieXRlcyAweGEzMGNlN2ZmIC8vIG1ldGhvZCAiZHVtbXkoKXZvaWQiCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIHJlc291cmNlLXBhY2tlci5hbGdvLnRzOjEwOQoJLy8gYXBwbGljYXRpb25JRDogdGhpcy5leHRlcm5hbEFwcElELnZhbHVlCglieXRlYyAwIC8vICAiZXh0ZXJuYWxBcHBJRCIKCWFwcF9nbG9iYWxfZ2V0CglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnRjIDEgLy8gMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGFzc2V0VG90YWwoKXZvaWQKKmFiaV9yb3V0ZV9hc3NldFRvdGFsOgoJLy8gZXhlY3V0ZSBhc3NldFRvdGFsKCl2b2lkCgljYWxsc3ViIGFzc2V0VG90YWwKCWludGMgMCAvLyAxCglyZXR1cm4KCi8vIGFzc2V0VG90YWwoKTogdm9pZAphc3NldFRvdGFsOgoJcHJvdG8gMCAwCgoJLy8gcmVzb3VyY2UtcGFja2VyLmFsZ28udHM6MTE1CgkvLyBhc3NlcnQodGhpcy5hc2EudmFsdWUudG90YWwpCglieXRlYyAxIC8vICAiYXNhIgoJYXBwX2dsb2JhbF9nZXQKCWFzc2V0X3BhcmFtc19nZXQgQXNzZXRUb3RhbAoJcG9wCglhc3NlcnQKCXJldHN1YgoKLy8gaGFzQXNzZXQoYWRkcmVzcyl2b2lkCiphYmlfcm91dGVfaGFzQXNzZXQ6CgkvLyBhZGRyOiBhZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglkdXAKCWxlbgoJaW50YyAzIC8vIDMyCgk9PQoKCS8vIGFyZ3VtZW50IDAgKGFkZHIpIGZvciBoYXNBc3NldCBtdXN0IGJlIGEgYWRkcmVzcwoJYXNzZXJ0CgoJLy8gZXhlY3V0ZSBoYXNBc3NldChhZGRyZXNzKXZvaWQKCWNhbGxzdWIgaGFzQXNzZXQKCWludGMgMCAvLyAxCglyZXR1cm4KCi8vIGhhc0Fzc2V0KGFkZHI6IEFkZHJlc3MpOiB2b2lkCmhhc0Fzc2V0OgoJcHJvdG8gMSAwCgoJLy8gcmVzb3VyY2UtcGFja2VyLmFsZ28udHM6MTE5CgkvLyBhc3NlcnQoIWFkZHIuaXNPcHRlZEluVG9Bc3NldCh0aGlzLmFzYS52YWx1ZSkpCglmcmFtZV9kaWcgLTEgLy8gYWRkcjogQWRkcmVzcwoJYnl0ZWMgMSAvLyAgImFzYSIKCWFwcF9nbG9iYWxfZ2V0Cglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJIQoJYXNzZXJ0CglyZXRzdWIKCi8vIGV4dGVybmFsTG9jYWwoYWRkcmVzcyl2b2lkCiphYmlfcm91dGVfZXh0ZXJuYWxMb2NhbDoKCS8vIGFkZHI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnRjIDMgLy8gMzIKCT09CgoJLy8gYXJndW1lbnQgMCAoYWRkcikgZm9yIGV4dGVybmFsTG9jYWwgbXVzdCBiZSBhIGFkZHJlc3MKCWFzc2VydAoKCS8vIGV4ZWN1dGUgZXh0ZXJuYWxMb2NhbChhZGRyZXNzKXZvaWQKCWNhbGxzdWIgZXh0ZXJuYWxMb2NhbAoJaW50YyAwIC8vIDEKCXJldHVybgoKLy8gZXh0ZXJuYWxMb2NhbChhZGRyOiBBZGRyZXNzKTogdm9pZApleHRlcm5hbExvY2FsOgoJcHJvdG8gMSAwCgoJLy8gcmVzb3VyY2UtcGFja2VyLmFsZ28udHM6MTIzCgkvLyBsb2codGhpcy5leHRlcm5hbEFwcElELnZhbHVlLmxvY2FsU3RhdGUoYWRkciwgJ2xvY2FsS2V5JykgYXMgYnl0ZXMpCglieXRlYyAwIC8vICAiZXh0ZXJuYWxBcHBJRCIKCWFwcF9nbG9iYWxfZ2V0CglwdXNoYnl0ZXMgMHg2YzZmNjM2MTZjNGI2NTc5IC8vICJsb2NhbEtleSIKCWZyYW1lX2RpZyAtMSAvLyBhZGRyOiBBZGRyZXNzCgljb3ZlciAyCglhcHBfbG9jYWxfZ2V0X2V4CgoJLy8gbG9jYWwgc3RhdGUgdmFsdWUgZG9lcyBub3QgZXhpc3Q6IHRoaXMuZXh0ZXJuYWxBcHBJRC52YWx1ZS5sb2NhbFN0YXRlKGFkZHIsICdsb2NhbEtleScpCglhc3NlcnQKCWxvZwoJcmV0c3ViCgoqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uOgoJaW50YyAwIC8vIDEKCXJldHVybgoKKmNyZWF0ZV9Ob09wOgoJYnl0ZWMgMiAvLyAgbWV0aG9kICJjcmVhdGVBcHBsaWNhdGlvbigpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb24KCgkvLyB0aGlzIGNvbnRyYWN0IGRvZXMgbm90IGltcGxlbWVudCB0aGUgZ2l2ZW4gQUJJIG1ldGhvZCBmb3IgY3JlYXRlIE5vT3AKCWVycgoKKmNhbGxfTm9PcDoKCXB1c2hieXRlcyAweGJlYzc2ZDg3IC8vIG1ldGhvZCAiYm9vdHN0cmFwKCl2b2lkIgoJcHVzaGJ5dGVzIDB4MjZkYjlkYjcgLy8gbWV0aG9kICJhZGRyZXNzQmFsYW5jZShhZGRyZXNzKXZvaWQiCglwdXNoYnl0ZXMgMHgzMDllZTA3MyAvLyBtZXRob2QgInNtYWxsQm94KCl2b2lkIgoJcHVzaGJ5dGVzIDB4YjU2NjhlMTcgLy8gbWV0aG9kICJtZWRpdW1Cb3goKXZvaWQiCglwdXNoYnl0ZXMgMHhhOWQ4MzVlMCAvLyBtZXRob2QgImV4dGVybmFsQXBwQ2FsbCgpdm9pZCIKCXB1c2hieXRlcyAweDIxMTYyNGEwIC8vIG1ldGhvZCAiYXNzZXRUb3RhbCgpdm9pZCIKCXB1c2hieXRlcyAweGFhMzhhZTkxIC8vIG1ldGhvZCAiaGFzQXNzZXQoYWRkcmVzcyl2b2lkIgoJcHVzaGJ5dGVzIDB4MjRkMWQwMTMgLy8gbWV0aG9kICJleHRlcm5hbExvY2FsKGFkZHJlc3Mpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfYm9vdHN0cmFwICphYmlfcm91dGVfYWRkcmVzc0JhbGFuY2UgKmFiaV9yb3V0ZV9zbWFsbEJveCAqYWJpX3JvdXRlX21lZGl1bUJveCAqYWJpX3JvdXRlX2V4dGVybmFsQXBwQ2FsbCAqYWJpX3JvdXRlX2Fzc2V0VG90YWwgKmFiaV9yb3V0ZV9oYXNBc3NldCAqYWJpX3JvdXRlX2V4dGVybmFsTG9jYWwKCgkvLyB0aGlzIGNvbnRyYWN0IGRvZXMgbm90IGltcGxlbWVudCB0aGUgZ2l2ZW4gQUJJIG1ldGhvZCBmb3IgY2FsbCBOb09wCgllcnI=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDg=" }, "contract": { diff --git a/tests/example-contracts/resource-packer/artifacts/ResourcePackerv9.arc32.json b/tests/example-contracts/resource-packer/artifacts/ResourcePackerv9.arc32.json index fb1572f7..b838b787 100644 --- a/tests/example-contracts/resource-packer/artifacts/ResourcePackerv9.arc32.json +++ b/tests/example-contracts/resource-packer/artifacts/ResourcePackerv9.arc32.json @@ -40,6 +40,16 @@ "no_op": "CALL" } }, + "dummy()void": { + "call_config": { + "no_op": "CALL" + } + }, + "manyResources(address[4],uint64[4],uint64[4],uint8[4])void": { + "call_config": { + "no_op": "CALL" + } + }, "createApplication()void": { "call_config": { "no_op": "CREATE" @@ -83,7 +93,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDkKaW50Y2Jsb2NrIDEgMCA2IDMyCmJ5dGVjYmxvY2sgMHg2NTc4NzQ2NTcyNmU2MTZjNDE3MDcwNDk0NCAweDYxNzM2MSAweGI4NDQ3YjM2IDB4NzMKCi8vIFRoaXMgVEVBTCB3YXMgZ2VuZXJhdGVkIGJ5IFRFQUxTY3JpcHQgdjAuMTA2LjMKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludGMgMiAvLyA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJLy8gVGhlIHJlcXVlc3RlZCBhY3Rpb24gaXMgbm90IGltcGxlbWVudGVkIGluIHRoaXMgY29udHJhY3QuIEFyZSB5b3UgdXNpbmcgdGhlIGNvcnJlY3QgT25Db21wbGV0ZT8gRGlkIHlvdSBzZXQgeW91ciBhcHAgSUQ/CgllcnIKCi8vIGJvb3RzdHJhcCgpdm9pZAoqYWJpX3JvdXRlX2Jvb3RzdHJhcDoKCS8vIGV4ZWN1dGUgYm9vdHN0cmFwKCl2b2lkCgljYWxsc3ViIGJvb3RzdHJhcAoJaW50YyAwIC8vIDEKCXJldHVybgoKLy8gYm9vdHN0cmFwKCk6IHZvaWQKYm9vdHN0cmFwOgoJcHJvdG8gMCAwCgoJLy8gdGVzdHMvZXhhbXBsZS1jb250cmFjdHMvcmVzb3VyY2UtcGFja2VyL3Jlc291cmNlLXBhY2tlci5hbGdvLnRzOjE0MAoJLy8gc2VuZE1ldGhvZENhbGw8W10sIHZvaWQ+KHsKCS8vICAgICAgIG5hbWU6ICdjcmVhdGVBcHBsaWNhdGlvbicsCgkvLyAgICAgICBhcHByb3ZhbFByb2dyYW06IEV4dGVybmFsQXBwLmFwcHJvdmFsUHJvZ3JhbSgpLAoJLy8gICAgICAgY2xlYXJTdGF0ZVByb2dyYW06IEV4dGVybmFsQXBwLmNsZWFyUHJvZ3JhbSgpLAoJLy8gICAgICAgbG9jYWxOdW1CeXRlU2xpY2U6IEV4dGVybmFsQXBwLnNjaGVtYS5sb2NhbC5udW1CeXRlU2xpY2UsCgkvLyAgICAgICBnbG9iYWxOdW1CeXRlU2xpY2U6IEV4dGVybmFsQXBwLnNjaGVtYS5nbG9iYWwubnVtQnl0ZVNsaWNlLAoJLy8gICAgICAgZ2xvYmFsTnVtVWludDogRXh0ZXJuYWxBcHAuc2NoZW1hLmdsb2JhbC5udW1VaW50LAoJLy8gICAgICAgbG9jYWxOdW1VaW50OiBFeHRlcm5hbEFwcC5zY2hlbWEubG9jYWwubnVtVWludCwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50YyAyIC8vICBhcHBsCglpdHhuX2ZpZWxkIFR5cGVFbnVtCglieXRlYyAyIC8vICBtZXRob2QgImNyZWF0ZUFwcGxpY2F0aW9uKCl2b2lkIgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyB0ZXN0cy9leGFtcGxlLWNvbnRyYWN0cy9yZXNvdXJjZS1wYWNrZXIvcmVzb3VyY2UtcGFja2VyLmFsZ28udHM6MTQyCgkvLyBhcHByb3ZhbFByb2dyYW06IEV4dGVybmFsQXBwLmFwcHJvdmFsUHJvZ3JhbSgpCglwdXNoYnl0ZXMgMHgwYTIwMDMwMTAwMDYyNjA1MDY2MjZmNzg0YjY1NzkwNGI4NDQ3YjM2MDM2NjZmNmYwMzYxNzM2MTAwMzExODE0MjQwYjMxMTkwODhkMGMwMTNiMDE3MTAwMDAwMDAwMDAwMDAwMDAwMTMyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg4MDAwMjIyNDM4YTAwMDAzMTAwODAwODZjNmY2MzYxNmM0YjY1NzkyYTY2ODk4ODAwMDIyMjQzOGEwMDAwODk4ODAwMDIyMjQzOGEwMDAwMDA4OTMxMTYyMjA5NDkzODEwMjIxMjQ0ODgwMDAyMjI0MzhhMDEwMDI4NDliYzQ4MmFiZjg5ODgwMDAyMjI0MzhhMDAwMDJiYjE4MTAzYjIxMDIyYjIyMjIzYjIwMWIzYjQzYzY3ODk4ODAwMDIyMjQzOGEwMDAwMzEwMDJiNjQ3MDAwNGM0ODE0NDQ4OTMxMTYyMjA5NDkzODEwMjIxMjQ0ODgwMDAyMjI0MzhhMDEwMDI3MDQ0OThiZmYzODA3MzIwYTEyNDRiMTI0YjIxMDI5YjIxYTgwNWQwYTIwMDEwMTMxMTgxNDgxMDYwYjMxMTkwODhkMGMwMDI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFhMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg4MDAwMjIyNDM4YTAwMDA4MDA4NjU2ZDcwNzQ3OTQyNmY3ODgxMDBiOTQ4ODkyMjQzODAwNGI4NDQ3YjM2MzYxYTAwOGUwMWZmZjEwMDgwMDRhNjhiZDI5NzM2MWEwMDhlMDFmZmNjMDBiMjFlODAwMTBhYjIxZjIzYjIwMWIzYjQzZDhjMDA4YjAwNzIwODQ4OGMwMWIxMjJiMjEwOGIwMWIyMDc4YmZmMzgwOGIyMDgyM2IyMDFiM2IxMjRiMjEwODAwNGE2OGJkMjk3YjIxYThiMDBiMjE4MjNiMjAxYjM4OTIyNDMyOTM2MWEwMDhlMDFmZmY2MDA4MDA0YTMwY2U3ZmY4MDA0NDRkMGRhMGQ4MDA0ZDYxZTQyNTU4MDA0YTY1YWFiZmU4MDA0NjU1YzVlMDI4MDA0MWE0NTZhY2EzNjFhMDA4ZTA2ZmVhOGZlYjFmZWJiZmVkNGZlZWRmZjAwMDA4MDA0MDFhM2EzZmYzNjFhMDA4ZTAxZmU4MzAwCglpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbQoKCS8vIHRlc3RzL2V4YW1wbGUtY29udHJhY3RzL3Jlc291cmNlLXBhY2tlci9yZXNvdXJjZS1wYWNrZXIuYWxnby50czoxNDMKCS8vIGNsZWFyU3RhdGVQcm9ncmFtOiBFeHRlcm5hbEFwcC5jbGVhclByb2dyYW0oKQoJcHVzaGJ5dGVzIDB4MGEKCWl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KCgkvLyB0ZXN0cy9leGFtcGxlLWNvbnRyYWN0cy9yZXNvdXJjZS1wYWNrZXIvcmVzb3VyY2UtcGFja2VyLmFsZ28udHM6MTQ0CgkvLyBsb2NhbE51bUJ5dGVTbGljZTogRXh0ZXJuYWxBcHAuc2NoZW1hLmxvY2FsLm51bUJ5dGVTbGljZQoJaW50YyAwIC8vIDEKCWl0eG5fZmllbGQgTG9jYWxOdW1CeXRlU2xpY2UKCgkvLyB0ZXN0cy9leGFtcGxlLWNvbnRyYWN0cy9yZXNvdXJjZS1wYWNrZXIvcmVzb3VyY2UtcGFja2VyLmFsZ28udHM6MTQ1CgkvLyBnbG9iYWxOdW1CeXRlU2xpY2U6IEV4dGVybmFsQXBwLnNjaGVtYS5nbG9iYWwubnVtQnl0ZVNsaWNlCglpbnRjIDEgLy8gMAoJaXR4bl9maWVsZCBHbG9iYWxOdW1CeXRlU2xpY2UKCgkvLyB0ZXN0cy9leGFtcGxlLWNvbnRyYWN0cy9yZXNvdXJjZS1wYWNrZXIvcmVzb3VyY2UtcGFja2VyLmFsZ28udHM6MTQ2CgkvLyBnbG9iYWxOdW1VaW50OiBFeHRlcm5hbEFwcC5zY2hlbWEuZ2xvYmFsLm51bVVpbnQKCWludGMgMCAvLyAxCglpdHhuX2ZpZWxkIEdsb2JhbE51bVVpbnQKCgkvLyB0ZXN0cy9leGFtcGxlLWNvbnRyYWN0cy9yZXNvdXJjZS1wYWNrZXIvcmVzb3VyY2UtcGFja2VyLmFsZ28udHM6MTQ3CgkvLyBsb2NhbE51bVVpbnQ6IEV4dGVybmFsQXBwLnNjaGVtYS5sb2NhbC5udW1VaW50CglpbnRjIDEgLy8gMAoJaXR4bl9maWVsZCBMb2NhbE51bVVpbnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnRjIDEgLy8gMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gdGVzdHMvZXhhbXBsZS1jb250cmFjdHMvcmVzb3VyY2UtcGFja2VyL3Jlc291cmNlLXBhY2tlci5hbGdvLnRzOjE1MAoJLy8gdGhpcy5leHRlcm5hbEFwcElELnZhbHVlID0gdGhpcy5pdHhuLmNyZWF0ZWRBcHBsaWNhdGlvbklECglieXRlYyAwIC8vICAiZXh0ZXJuYWxBcHBJRCIKCWl0eG4gQ3JlYXRlZEFwcGxpY2F0aW9uSUQKCWFwcF9nbG9iYWxfcHV0CgoJLy8gdGVzdHMvZXhhbXBsZS1jb250cmFjdHMvcmVzb3VyY2UtcGFja2VyL3Jlc291cmNlLXBhY2tlci5hbGdvLnRzOjE1MgoJLy8gdGhpcy5hc2EudmFsdWUgPSBzZW5kQXNzZXRDcmVhdGlvbih7CgkvLyAgICAgICBjb25maWdBc3NldFRvdGFsOiAxLAoJLy8gICAgIH0pCglieXRlYyAxIC8vICAiYXNhIgoJaXR4bl9iZWdpbgoJcHVzaGludCAzIC8vIGFjZmcKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyB0ZXN0cy9leGFtcGxlLWNvbnRyYWN0cy9yZXNvdXJjZS1wYWNrZXIvcmVzb3VyY2UtcGFja2VyLmFsZ28udHM6MTUzCgkvLyBjb25maWdBc3NldFRvdGFsOiAxCglpbnRjIDAgLy8gMQoJaXR4bl9maWVsZCBDb25maWdBc3NldFRvdGFsCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50YyAxIC8vIDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJaXR4biBDcmVhdGVkQXNzZXRJRAoJYXBwX2dsb2JhbF9wdXQKCXJldHN1YgoKLy8gYWRkcmVzc0JhbGFuY2UoYWRkcmVzcyl2b2lkCiphYmlfcm91dGVfYWRkcmVzc0JhbGFuY2U6CgkvLyBhZGRyOiBhZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglkdXAKCWxlbgoJaW50YyAzIC8vIDMyCgk9PQoKCS8vIGFyZ3VtZW50IDAgKGFkZHIpIGZvciBhZGRyZXNzQmFsYW5jZSBtdXN0IGJlIGEgYWRkcmVzcwoJYXNzZXJ0CgoJLy8gZXhlY3V0ZSBhZGRyZXNzQmFsYW5jZShhZGRyZXNzKXZvaWQKCWNhbGxzdWIgYWRkcmVzc0JhbGFuY2UKCWludGMgMCAvLyAxCglyZXR1cm4KCi8vIGFkZHJlc3NCYWxhbmNlKGFkZHI6IEFkZHJlc3MpOiB2b2lkCmFkZHJlc3NCYWxhbmNlOgoJcHJvdG8gMSAwCgoJLy8gdGVzdHMvZXhhbXBsZS1jb250cmFjdHMvcmVzb3VyY2UtcGFja2VyL3Jlc291cmNlLXBhY2tlci5hbGdvLnRzOjE1OAoJLy8gbG9nKHJhd0J5dGVzKGFkZHIuaXNJbkxlZGdlcikpCglmcmFtZV9kaWcgLTEgLy8gYWRkcjogQWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglzd2FwCglwb3AKCXB1c2hieXRlcyAweDAwCglpbnRjIDEgLy8gMAoJdW5jb3ZlciAyCglzZXRiaXQKCWxvZwoJcmV0c3ViCgovLyBzbWFsbEJveCgpdm9pZAoqYWJpX3JvdXRlX3NtYWxsQm94OgoJLy8gZXhlY3V0ZSBzbWFsbEJveCgpdm9pZAoJY2FsbHN1YiBzbWFsbEJveAoJaW50YyAwIC8vIDEKCXJldHVybgoKLy8gc21hbGxCb3goKTogdm9pZApzbWFsbEJveDoKCXByb3RvIDAgMAoKCS8vIHRlc3RzL2V4YW1wbGUtY29udHJhY3RzL3Jlc291cmNlLXBhY2tlci9yZXNvdXJjZS1wYWNrZXIuYWxnby50czoxNjIKCS8vIHRoaXMuc21hbGxCb3hLZXkudmFsdWUgPSAnJwoJYnl0ZWMgMyAvLyAgInMiCglkdXAKCWJveF9kZWwKCXBvcAoJcHVzaGJ5dGVzIDB4IC8vICIiCglib3hfcHV0CglyZXRzdWIKCi8vIG1lZGl1bUJveCgpdm9pZAoqYWJpX3JvdXRlX21lZGl1bUJveDoKCS8vIGV4ZWN1dGUgbWVkaXVtQm94KCl2b2lkCgljYWxsc3ViIG1lZGl1bUJveAoJaW50YyAwIC8vIDEKCXJldHVybgoKLy8gbWVkaXVtQm94KCk6IHZvaWQKbWVkaXVtQm94OgoJcHJvdG8gMCAwCgoJLy8gdGVzdHMvZXhhbXBsZS1jb250cmFjdHMvcmVzb3VyY2UtcGFja2VyL3Jlc291cmNlLXBhY2tlci5hbGdvLnRzOjE2NgoJLy8gdGhpcy5tZWRpdW1Cb3hLZXkuY3JlYXRlKDVfMDAwKQoJcHVzaGJ5dGVzIDB4NmQgLy8gIm0iCglwdXNoaW50IDVfMDAwCglib3hfY3JlYXRlCglwb3AKCXJldHN1YgoKLy8gZXh0ZXJuYWxBcHBDYWxsKCl2b2lkCiphYmlfcm91dGVfZXh0ZXJuYWxBcHBDYWxsOgoJLy8gZXhlY3V0ZSBleHRlcm5hbEFwcENhbGwoKXZvaWQKCWNhbGxzdWIgZXh0ZXJuYWxBcHBDYWxsCglpbnRjIDAgLy8gMQoJcmV0dXJuCgovLyBleHRlcm5hbEFwcENhbGwoKTogdm9pZApleHRlcm5hbEFwcENhbGw6Cglwcm90byAwIDAKCgkvLyB0ZXN0cy9leGFtcGxlLWNvbnRyYWN0cy9yZXNvdXJjZS1wYWNrZXIvcmVzb3VyY2UtcGFja2VyLmFsZ28udHM6MTcwCgkvLyBzZW5kTWV0aG9kQ2FsbDxbXSwgdm9pZD4oewoJLy8gICAgICAgYXBwbGljYXRpb25JRDogdGhpcy5leHRlcm5hbEFwcElELnZhbHVlLAoJLy8gICAgICAgbmFtZTogJ2R1bW15JywKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50YyAyIC8vICBhcHBsCglpdHhuX2ZpZWxkIFR5cGVFbnVtCglwdXNoYnl0ZXMgMHhhMzBjZTdmZiAvLyBtZXRob2QgImR1bW15KCl2b2lkIgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyB0ZXN0cy9leGFtcGxlLWNvbnRyYWN0cy9yZXNvdXJjZS1wYWNrZXIvcmVzb3VyY2UtcGFja2VyLmFsZ28udHM6MTcxCgkvLyBhcHBsaWNhdGlvbklEOiB0aGlzLmV4dGVybmFsQXBwSUQudmFsdWUKCWJ5dGVjIDAgLy8gICJleHRlcm5hbEFwcElEIgoJYXBwX2dsb2JhbF9nZXQKCWl0eG5fZmllbGQgQXBwbGljYXRpb25JRAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludGMgMSAvLyAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gYXNzZXRUb3RhbCgpdm9pZAoqYWJpX3JvdXRlX2Fzc2V0VG90YWw6CgkvLyBleGVjdXRlIGFzc2V0VG90YWwoKXZvaWQKCWNhbGxzdWIgYXNzZXRUb3RhbAoJaW50YyAwIC8vIDEKCXJldHVybgoKLy8gYXNzZXRUb3RhbCgpOiB2b2lkCmFzc2V0VG90YWw6Cglwcm90byAwIDAKCgkvLyB0ZXN0cy9leGFtcGxlLWNvbnRyYWN0cy9yZXNvdXJjZS1wYWNrZXIvcmVzb3VyY2UtcGFja2VyLmFsZ28udHM6MTc3CgkvLyBhc3NlcnQodGhpcy5hc2EudmFsdWUudG90YWwpCglieXRlYyAxIC8vICAiYXNhIgoJYXBwX2dsb2JhbF9nZXQKCWFzc2V0X3BhcmFtc19nZXQgQXNzZXRUb3RhbAoJcG9wCglhc3NlcnQKCXJldHN1YgoKLy8gaGFzQXNzZXQoYWRkcmVzcyl2b2lkCiphYmlfcm91dGVfaGFzQXNzZXQ6CgkvLyBhZGRyOiBhZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglkdXAKCWxlbgoJaW50YyAzIC8vIDMyCgk9PQoKCS8vIGFyZ3VtZW50IDAgKGFkZHIpIGZvciBoYXNBc3NldCBtdXN0IGJlIGEgYWRkcmVzcwoJYXNzZXJ0CgoJLy8gZXhlY3V0ZSBoYXNBc3NldChhZGRyZXNzKXZvaWQKCWNhbGxzdWIgaGFzQXNzZXQKCWludGMgMCAvLyAxCglyZXR1cm4KCi8vIGhhc0Fzc2V0KGFkZHI6IEFkZHJlc3MpOiB2b2lkCmhhc0Fzc2V0OgoJcHJvdG8gMSAwCgoJLy8gdGVzdHMvZXhhbXBsZS1jb250cmFjdHMvcmVzb3VyY2UtcGFja2VyL3Jlc291cmNlLXBhY2tlci5hbGdvLnRzOjE4MQoJLy8gYXNzZXJ0KCFhZGRyLmlzT3B0ZWRJblRvQXNzZXQodGhpcy5hc2EudmFsdWUpKQoJZnJhbWVfZGlnIC0xIC8vIGFkZHI6IEFkZHJlc3MKCWJ5dGVjIDEgLy8gICJhc2EiCglhcHBfZ2xvYmFsX2dldAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCSEKCWFzc2VydAoJcmV0c3ViCgovLyBleHRlcm5hbExvY2FsKGFkZHJlc3Mpdm9pZAoqYWJpX3JvdXRlX2V4dGVybmFsTG9jYWw6CgkvLyBhZGRyOiBhZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglkdXAKCWxlbgoJaW50YyAzIC8vIDMyCgk9PQoKCS8vIGFyZ3VtZW50IDAgKGFkZHIpIGZvciBleHRlcm5hbExvY2FsIG11c3QgYmUgYSBhZGRyZXNzCglhc3NlcnQKCgkvLyBleGVjdXRlIGV4dGVybmFsTG9jYWwoYWRkcmVzcyl2b2lkCgljYWxsc3ViIGV4dGVybmFsTG9jYWwKCWludGMgMCAvLyAxCglyZXR1cm4KCi8vIGV4dGVybmFsTG9jYWwoYWRkcjogQWRkcmVzcyk6IHZvaWQKZXh0ZXJuYWxMb2NhbDoKCXByb3RvIDEgMAoKCS8vIHRlc3RzL2V4YW1wbGUtY29udHJhY3RzL3Jlc291cmNlLXBhY2tlci9yZXNvdXJjZS1wYWNrZXIuYWxnby50czoxODUKCS8vIGxvZyh0aGlzLmV4dGVybmFsQXBwSUQudmFsdWUubG9jYWxTdGF0ZShhZGRyLCAnbG9jYWxLZXknKSBhcyBieXRlcykKCWJ5dGVjIDAgLy8gICJleHRlcm5hbEFwcElEIgoJYXBwX2dsb2JhbF9nZXQKCXB1c2hieXRlcyAweDZjNmY2MzYxNmM0YjY1NzkgLy8gImxvY2FsS2V5IgoJZnJhbWVfZGlnIC0xIC8vIGFkZHI6IEFkZHJlc3MKCWNvdmVyIDIKCWFwcF9sb2NhbF9nZXRfZXgKCgkvLyBsb2NhbCBzdGF0ZSB2YWx1ZSBkb2VzIG5vdCBleGlzdDogdGhpcy5leHRlcm5hbEFwcElELnZhbHVlLmxvY2FsU3RhdGUoYWRkciwgJ2xvY2FsS2V5JykKCWFzc2VydAoJbG9nCglyZXRzdWIKCiphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb246CglpbnRjIDAgLy8gMQoJcmV0dXJuCgoqY3JlYXRlX05vT3A6CglieXRlYyAyIC8vICBtZXRob2QgImNyZWF0ZUFwcGxpY2F0aW9uKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbgoKCS8vIHRoaXMgY29udHJhY3QgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBnaXZlbiBBQkkgbWV0aG9kIGZvciBjcmVhdGUgTm9PcAoJZXJyCgoqY2FsbF9Ob09wOgoJcHVzaGJ5dGVzIDB4YmVjNzZkODcgLy8gbWV0aG9kICJib290c3RyYXAoKXZvaWQiCglwdXNoYnl0ZXMgMHgyNmRiOWRiNyAvLyBtZXRob2QgImFkZHJlc3NCYWxhbmNlKGFkZHJlc3Mpdm9pZCIKCXB1c2hieXRlcyAweDMwOWVlMDczIC8vIG1ldGhvZCAic21hbGxCb3goKXZvaWQiCglwdXNoYnl0ZXMgMHhiNTY2OGUxNyAvLyBtZXRob2QgIm1lZGl1bUJveCgpdm9pZCIKCXB1c2hieXRlcyAweGE5ZDgzNWUwIC8vIG1ldGhvZCAiZXh0ZXJuYWxBcHBDYWxsKCl2b2lkIgoJcHVzaGJ5dGVzIDB4MjExNjI0YTAgLy8gbWV0aG9kICJhc3NldFRvdGFsKCl2b2lkIgoJcHVzaGJ5dGVzIDB4YWEzOGFlOTEgLy8gbWV0aG9kICJoYXNBc3NldChhZGRyZXNzKXZvaWQiCglwdXNoYnl0ZXMgMHgyNGQxZDAxMyAvLyBtZXRob2QgImV4dGVybmFsTG9jYWwoYWRkcmVzcyl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9ib290c3RyYXAgKmFiaV9yb3V0ZV9hZGRyZXNzQmFsYW5jZSAqYWJpX3JvdXRlX3NtYWxsQm94ICphYmlfcm91dGVfbWVkaXVtQm94ICphYmlfcm91dGVfZXh0ZXJuYWxBcHBDYWxsICphYmlfcm91dGVfYXNzZXRUb3RhbCAqYWJpX3JvdXRlX2hhc0Fzc2V0ICphYmlfcm91dGVfZXh0ZXJuYWxMb2NhbAoKCS8vIHRoaXMgY29udHJhY3QgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBnaXZlbiBBQkkgbWV0aG9kIGZvciBjYWxsIE5vT3AKCWVycg==", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDkKaW50Y2Jsb2NrIDEgMCAzMiA4IDYgNCAxMjgKYnl0ZWNibG9jayAweCAweDY1Nzg3NDY1NzI2ZTYxNmM0MTcwNzA0OTQ0IDB4NjE3MzYxIDB4Yjg0NDdiMzYgMHhhMzBjZTdmZiAweDczCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjEwNi4zCi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hbGdvcmFuZGZvdW5kYXRpb24vVEVBTFNjcmlwdAoKLy8gVGhpcyBjb250cmFjdCBpcyBjb21wbGlhbnQgd2l0aCBhbmQvb3IgaW1wbGVtZW50cyB0aGUgZm9sbG93aW5nIEFSQ3M6IFsgQVJDNCBdCgovLyBUaGUgZm9sbG93aW5nIHRlbiBsaW5lcyBvZiBURUFMIGhhbmRsZSBpbml0aWFsIHByb2dyYW0gZmxvdwovLyBUaGlzIHBhdHRlcm4gaXMgdXNlZCB0byBtYWtlIGl0IGVhc3kgZm9yIGFueW9uZSB0byBwYXJzZSB0aGUgc3RhcnQgb2YgdGhlIHByb2dyYW0gYW5kIGRldGVybWluZSBpZiBhIHNwZWNpZmljIGFjdGlvbiBpcyBhbGxvd2VkCi8vIEhlcmUsIGFjdGlvbiByZWZlcnMgdG8gdGhlIE9uQ29tcGxldGUgaW4gY29tYmluYXRpb24gd2l0aCB3aGV0aGVyIHRoZSBhcHAgaXMgYmVpbmcgY3JlYXRlZCBvciBjYWxsZWQKLy8gRXZlcnkgcG9zc2libGUgYWN0aW9uIGZvciB0aGlzIGNvbnRyYWN0IGlzIHJlcHJlc2VudGVkIGluIHRoZSBzd2l0Y2ggc3RhdGVtZW50Ci8vIElmIHRoZSBhY3Rpb24gaXMgbm90IGltcGxlbWVudGVkIGluIHRoZSBjb250cmFjdCwgaXRzIHJlc3BlY3RpdmUgYnJhbmNoIHdpbGwgYmUgIipOT1RfSU1QTEVNRU5URUQiIHdoaWNoIGp1c3QgY29udGFpbnMgImVyciIKdHhuIEFwcGxpY2F0aW9uSUQKIQppbnRjIDQgLy8gNgoqCnR4biBPbkNvbXBsZXRpb24KKwpzd2l0Y2ggKmNhbGxfTm9PcCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKmNyZWF0ZV9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRAoKKk5PVF9JTVBMRU1FTlRFRDoKCS8vIFRoZSByZXF1ZXN0ZWQgYWN0aW9uIGlzIG5vdCBpbXBsZW1lbnRlZCBpbiB0aGlzIGNvbnRyYWN0LiBBcmUgeW91IHVzaW5nIHRoZSBjb3JyZWN0IE9uQ29tcGxldGU/IERpZCB5b3Ugc2V0IHlvdXIgYXBwIElEPwoJZXJyCgovLyBib290c3RyYXAoKXZvaWQKKmFiaV9yb3V0ZV9ib290c3RyYXA6CgkvLyBleGVjdXRlIGJvb3RzdHJhcCgpdm9pZAoJY2FsbHN1YiBib290c3RyYXAKCWludGMgMCAvLyAxCglyZXR1cm4KCi8vIGJvb3RzdHJhcCgpOiB2b2lkCmJvb3RzdHJhcDoKCXByb3RvIDAgMAoKCS8vIHJlc291cmNlLXBhY2tlci5hbGdvLnRzOjE0MgoJLy8gc2VuZE1ldGhvZENhbGw8W10sIHZvaWQ+KHsKCS8vICAgICAgIG5hbWU6ICdjcmVhdGVBcHBsaWNhdGlvbicsCgkvLyAgICAgICBhcHByb3ZhbFByb2dyYW06IEV4dGVybmFsQXBwLmFwcHJvdmFsUHJvZ3JhbSgpLAoJLy8gICAgICAgY2xlYXJTdGF0ZVByb2dyYW06IEV4dGVybmFsQXBwLmNsZWFyUHJvZ3JhbSgpLAoJLy8gICAgICAgbG9jYWxOdW1CeXRlU2xpY2U6IEV4dGVybmFsQXBwLnNjaGVtYS5sb2NhbC5udW1CeXRlU2xpY2UsCgkvLyAgICAgICBnbG9iYWxOdW1CeXRlU2xpY2U6IEV4dGVybmFsQXBwLnNjaGVtYS5nbG9iYWwubnVtQnl0ZVNsaWNlLAoJLy8gICAgICAgZ2xvYmFsTnVtVWludDogRXh0ZXJuYWxBcHAuc2NoZW1hLmdsb2JhbC5udW1VaW50LAoJLy8gICAgICAgbG9jYWxOdW1VaW50OiBFeHRlcm5hbEFwcC5zY2hlbWEubG9jYWwubnVtVWludCwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50YyA0IC8vICBhcHBsCglpdHhuX2ZpZWxkIFR5cGVFbnVtCglieXRlYyAzIC8vICBtZXRob2QgImNyZWF0ZUFwcGxpY2F0aW9uKCl2b2lkIgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyByZXNvdXJjZS1wYWNrZXIuYWxnby50czoxNDQKCS8vIGFwcHJvdmFsUHJvZ3JhbTogRXh0ZXJuYWxBcHAuYXBwcm92YWxQcm9ncmFtKCkKCXB1c2hieXRlcyAweDBhMjAwMzAxMDAwNjI2MDUwNjYyNmY3ODRiNjU3OTA0Yjg0NDdiMzYwMzY2NmY2ZjAzNjE3MzYxMDAzMTE4MTQyNDBiMzExOTA4OGQwYzAxM2IwMTcxMDAwMDAwMDAwMDAwMDAwMDAxMzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODgwMDAyMjI0MzhhMDAwMDMxMDA4MDA4NmM2ZjYzNjE2YzRiNjU3OTJhNjY4OTg4MDAwMjIyNDM4YTAwMDA4OTg4MDAwMjIyNDM4YTAwMDAwMDg5MzExNjIyMDk0OTM4MTAyMjEyNDQ4ODAwMDIyMjQzOGEwMTAwMjg0OWJjNDgyYWJmODk4ODAwMDIyMjQzOGEwMDAwMmJiMTgxMDNiMjEwMjJiMjIyMjNiMjAxYjNiNDNjNjc4OTg4MDAwMjIyNDM4YTAwMDAzMTAwMmI2NDcwMDA0YzQ4MTQ0NDg5MzExNjIyMDk0OTM4MTAyMjEyNDQ4ODAwMDIyMjQzOGEwMTAwMjcwNDQ5OGJmZjM4MDczMjBhMTI0NGIxMjRiMjEwMjliMjFhODA1ZDBhMjAwMTAxMzExODE0ODEwNjBiMzExOTA4OGQwYzAwMjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMWEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODgwMDAyMjI0MzhhMDAwMDgwMDg2NTZkNzA3NDc5NDI2Zjc4ODEwMGI5NDg4OTIyNDM4MDA0Yjg0NDdiMzYzNjFhMDA4ZTAxZmZmMTAwODAwNGE2OGJkMjk3MzYxYTAwOGUwMWZmY2MwMGIyMWU4MDAxMGFiMjFmMjNiMjAxYjNiNDNkOGMwMDhiMDA3MjA4NDg4YzAxYjEyMmIyMTA4YjAxYjIwNzhiZmYzODA4YjIwODIzYjIwMWIzYjEyNGIyMTA4MDA0YTY4YmQyOTdiMjFhOGIwMGIyMTgyM2IyMDFiMzg5MjI0MzI5MzYxYTAwOGUwMWZmZjYwMDgwMDRhMzBjZTdmZjgwMDQ0NGQwZGEwZDgwMDRkNjFlNDI1NTgwMDRhNjVhYWJmZTgwMDQ2NTVjNWUwMjgwMDQxYTQ1NmFjYTM2MWEwMDhlMDZmZWE4ZmViMWZlYmJmZWQ0ZmVlZGZmMDAwMDgwMDQwMWEzYTNmZjM2MWEwMDhlMDFmZTgzMDAKCWl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtCgoJLy8gcmVzb3VyY2UtcGFja2VyLmFsZ28udHM6MTQ1CgkvLyBjbGVhclN0YXRlUHJvZ3JhbTogRXh0ZXJuYWxBcHAuY2xlYXJQcm9ncmFtKCkKCXB1c2hieXRlcyAweDBhCglpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtCgoJLy8gcmVzb3VyY2UtcGFja2VyLmFsZ28udHM6MTQ2CgkvLyBsb2NhbE51bUJ5dGVTbGljZTogRXh0ZXJuYWxBcHAuc2NoZW1hLmxvY2FsLm51bUJ5dGVTbGljZQoJaW50YyAwIC8vIDEKCWl0eG5fZmllbGQgTG9jYWxOdW1CeXRlU2xpY2UKCgkvLyByZXNvdXJjZS1wYWNrZXIuYWxnby50czoxNDcKCS8vIGdsb2JhbE51bUJ5dGVTbGljZTogRXh0ZXJuYWxBcHAuc2NoZW1hLmdsb2JhbC5udW1CeXRlU2xpY2UKCWludGMgMSAvLyAwCglpdHhuX2ZpZWxkIEdsb2JhbE51bUJ5dGVTbGljZQoKCS8vIHJlc291cmNlLXBhY2tlci5hbGdvLnRzOjE0OAoJLy8gZ2xvYmFsTnVtVWludDogRXh0ZXJuYWxBcHAuc2NoZW1hLmdsb2JhbC5udW1VaW50CglpbnRjIDAgLy8gMQoJaXR4bl9maWVsZCBHbG9iYWxOdW1VaW50CgoJLy8gcmVzb3VyY2UtcGFja2VyLmFsZ28udHM6MTQ5CgkvLyBsb2NhbE51bVVpbnQ6IEV4dGVybmFsQXBwLnNjaGVtYS5sb2NhbC5udW1VaW50CglpbnRjIDEgLy8gMAoJaXR4bl9maWVsZCBMb2NhbE51bVVpbnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnRjIDEgLy8gMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gcmVzb3VyY2UtcGFja2VyLmFsZ28udHM6MTUyCgkvLyB0aGlzLmV4dGVybmFsQXBwSUQudmFsdWUgPSB0aGlzLml0eG4uY3JlYXRlZEFwcGxpY2F0aW9uSUQKCWJ5dGVjIDEgLy8gICJleHRlcm5hbEFwcElEIgoJaXR4biBDcmVhdGVkQXBwbGljYXRpb25JRAoJYXBwX2dsb2JhbF9wdXQKCgkvLyByZXNvdXJjZS1wYWNrZXIuYWxnby50czoxNTQKCS8vIHRoaXMuYXNhLnZhbHVlID0gc2VuZEFzc2V0Q3JlYXRpb24oewoJLy8gICAgICAgY29uZmlnQXNzZXRUb3RhbDogMSwKCS8vICAgICB9KQoJYnl0ZWMgMiAvLyAgImFzYSIKCWl0eG5fYmVnaW4KCXB1c2hpbnQgMyAvLyBhY2ZnCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gcmVzb3VyY2UtcGFja2VyLmFsZ28udHM6MTU1CgkvLyBjb25maWdBc3NldFRvdGFsOiAxCglpbnRjIDAgLy8gMQoJaXR4bl9maWVsZCBDb25maWdBc3NldFRvdGFsCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50YyAxIC8vIDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJaXR4biBDcmVhdGVkQXNzZXRJRAoJYXBwX2dsb2JhbF9wdXQKCXJldHN1YgoKLy8gYWRkcmVzc0JhbGFuY2UoYWRkcmVzcyl2b2lkCiphYmlfcm91dGVfYWRkcmVzc0JhbGFuY2U6CgkvLyBhZGRyOiBhZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglkdXAKCWxlbgoJaW50YyAyIC8vIDMyCgk9PQoKCS8vIGFyZ3VtZW50IDAgKGFkZHIpIGZvciBhZGRyZXNzQmFsYW5jZSBtdXN0IGJlIGEgYWRkcmVzcwoJYXNzZXJ0CgoJLy8gZXhlY3V0ZSBhZGRyZXNzQmFsYW5jZShhZGRyZXNzKXZvaWQKCWNhbGxzdWIgYWRkcmVzc0JhbGFuY2UKCWludGMgMCAvLyAxCglyZXR1cm4KCi8vIGFkZHJlc3NCYWxhbmNlKGFkZHI6IEFkZHJlc3MpOiB2b2lkCmFkZHJlc3NCYWxhbmNlOgoJcHJvdG8gMSAwCgoJLy8gcmVzb3VyY2UtcGFja2VyLmFsZ28udHM6MTYwCgkvLyBsb2cocmF3Qnl0ZXMoYWRkci5pc0luTGVkZ2VyKSkKCWZyYW1lX2RpZyAtMSAvLyBhZGRyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXN3YXAKCXBvcAoJcHVzaGJ5dGVzIDB4MDAKCWludGMgMSAvLyAwCgl1bmNvdmVyIDIKCXNldGJpdAoJbG9nCglyZXRzdWIKCi8vIHNtYWxsQm94KCl2b2lkCiphYmlfcm91dGVfc21hbGxCb3g6CgkvLyBleGVjdXRlIHNtYWxsQm94KCl2b2lkCgljYWxsc3ViIHNtYWxsQm94CglpbnRjIDAgLy8gMQoJcmV0dXJuCgovLyBzbWFsbEJveCgpOiB2b2lkCnNtYWxsQm94OgoJcHJvdG8gMCAwCgoJLy8gcmVzb3VyY2UtcGFja2VyLmFsZ28udHM6MTY0CgkvLyB0aGlzLnNtYWxsQm94S2V5LnZhbHVlID0gJycKCWJ5dGVjIDUgLy8gICJzIgoJZHVwCglib3hfZGVsCglwb3AKCWJ5dGVjIDAgLy8gICIiCglib3hfcHV0CglyZXRzdWIKCi8vIG1lZGl1bUJveCgpdm9pZAoqYWJpX3JvdXRlX21lZGl1bUJveDoKCS8vIGV4ZWN1dGUgbWVkaXVtQm94KCl2b2lkCgljYWxsc3ViIG1lZGl1bUJveAoJaW50YyAwIC8vIDEKCXJldHVybgoKLy8gbWVkaXVtQm94KCk6IHZvaWQKbWVkaXVtQm94OgoJcHJvdG8gMCAwCgoJLy8gcmVzb3VyY2UtcGFja2VyLmFsZ28udHM6MTY4CgkvLyB0aGlzLm1lZGl1bUJveEtleS5jcmVhdGUoNV8wMDApCglwdXNoYnl0ZXMgMHg2ZCAvLyAibSIKCXB1c2hpbnQgNV8wMDAKCWJveF9jcmVhdGUKCXBvcAoJcmV0c3ViCgovLyBleHRlcm5hbEFwcENhbGwoKXZvaWQKKmFiaV9yb3V0ZV9leHRlcm5hbEFwcENhbGw6CgkvLyBleGVjdXRlIGV4dGVybmFsQXBwQ2FsbCgpdm9pZAoJY2FsbHN1YiBleHRlcm5hbEFwcENhbGwKCWludGMgMCAvLyAxCglyZXR1cm4KCi8vIGV4dGVybmFsQXBwQ2FsbCgpOiB2b2lkCmV4dGVybmFsQXBwQ2FsbDoKCXByb3RvIDAgMAoKCS8vIHJlc291cmNlLXBhY2tlci5hbGdvLnRzOjE3MgoJLy8gc2VuZE1ldGhvZENhbGw8W10sIHZvaWQ+KHsKCS8vICAgICAgIGFwcGxpY2F0aW9uSUQ6IHRoaXMuZXh0ZXJuYWxBcHBJRC52YWx1ZSwKCS8vICAgICAgIG5hbWU6ICdkdW1teScsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludGMgNCAvLyAgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoJYnl0ZWMgNCAvLyAgbWV0aG9kICJkdW1teSgpdm9pZCIKCWl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCgoJLy8gcmVzb3VyY2UtcGFja2VyLmFsZ28udHM6MTczCgkvLyBhcHBsaWNhdGlvbklEOiB0aGlzLmV4dGVybmFsQXBwSUQudmFsdWUKCWJ5dGVjIDEgLy8gICJleHRlcm5hbEFwcElEIgoJYXBwX2dsb2JhbF9nZXQKCWl0eG5fZmllbGQgQXBwbGljYXRpb25JRAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludGMgMSAvLyAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gYXNzZXRUb3RhbCgpdm9pZAoqYWJpX3JvdXRlX2Fzc2V0VG90YWw6CgkvLyBleGVjdXRlIGFzc2V0VG90YWwoKXZvaWQKCWNhbGxzdWIgYXNzZXRUb3RhbAoJaW50YyAwIC8vIDEKCXJldHVybgoKLy8gYXNzZXRUb3RhbCgpOiB2b2lkCmFzc2V0VG90YWw6Cglwcm90byAwIDAKCgkvLyByZXNvdXJjZS1wYWNrZXIuYWxnby50czoxNzkKCS8vIGFzc2VydCh0aGlzLmFzYS52YWx1ZS50b3RhbCkKCWJ5dGVjIDIgLy8gICJhc2EiCglhcHBfZ2xvYmFsX2dldAoJYXNzZXRfcGFyYW1zX2dldCBBc3NldFRvdGFsCglwb3AKCWFzc2VydAoJcmV0c3ViCgovLyBoYXNBc3NldChhZGRyZXNzKXZvaWQKKmFiaV9yb3V0ZV9oYXNBc3NldDoKCS8vIGFkZHI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnRjIDIgLy8gMzIKCT09CgoJLy8gYXJndW1lbnQgMCAoYWRkcikgZm9yIGhhc0Fzc2V0IG11c3QgYmUgYSBhZGRyZXNzCglhc3NlcnQKCgkvLyBleGVjdXRlIGhhc0Fzc2V0KGFkZHJlc3Mpdm9pZAoJY2FsbHN1YiBoYXNBc3NldAoJaW50YyAwIC8vIDEKCXJldHVybgoKLy8gaGFzQXNzZXQoYWRkcjogQWRkcmVzcyk6IHZvaWQKaGFzQXNzZXQ6Cglwcm90byAxIDAKCgkvLyByZXNvdXJjZS1wYWNrZXIuYWxnby50czoxODMKCS8vIGFzc2VydCghYWRkci5pc09wdGVkSW5Ub0Fzc2V0KHRoaXMuYXNhLnZhbHVlKSkKCWZyYW1lX2RpZyAtMSAvLyBhZGRyOiBBZGRyZXNzCglieXRlYyAyIC8vICAiYXNhIgoJYXBwX2dsb2JhbF9nZXQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJc3dhcAoJcG9wCgkhCglhc3NlcnQKCXJldHN1YgoKLy8gZXh0ZXJuYWxMb2NhbChhZGRyZXNzKXZvaWQKKmFiaV9yb3V0ZV9leHRlcm5hbExvY2FsOgoJLy8gYWRkcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludGMgMiAvLyAzMgoJPT0KCgkvLyBhcmd1bWVudCAwIChhZGRyKSBmb3IgZXh0ZXJuYWxMb2NhbCBtdXN0IGJlIGEgYWRkcmVzcwoJYXNzZXJ0CgoJLy8gZXhlY3V0ZSBleHRlcm5hbExvY2FsKGFkZHJlc3Mpdm9pZAoJY2FsbHN1YiBleHRlcm5hbExvY2FsCglpbnRjIDAgLy8gMQoJcmV0dXJuCgovLyBleHRlcm5hbExvY2FsKGFkZHI6IEFkZHJlc3MpOiB2b2lkCmV4dGVybmFsTG9jYWw6Cglwcm90byAxIDAKCgkvLyByZXNvdXJjZS1wYWNrZXIuYWxnby50czoxODcKCS8vIGxvZyh0aGlzLmV4dGVybmFsQXBwSUQudmFsdWUubG9jYWxTdGF0ZShhZGRyLCAnbG9jYWxLZXknKSBhcyBieXRlcykKCWJ5dGVjIDEgLy8gICJleHRlcm5hbEFwcElEIgoJYXBwX2dsb2JhbF9nZXQKCXB1c2hieXRlcyAweDZjNmY2MzYxNmM0YjY1NzkgLy8gImxvY2FsS2V5IgoJZnJhbWVfZGlnIC0xIC8vIGFkZHI6IEFkZHJlc3MKCWNvdmVyIDIKCWFwcF9sb2NhbF9nZXRfZXgKCgkvLyBsb2NhbCBzdGF0ZSB2YWx1ZSBkb2VzIG5vdCBleGlzdDogdGhpcy5leHRlcm5hbEFwcElELnZhbHVlLmxvY2FsU3RhdGUoYWRkciwgJ2xvY2FsS2V5JykKCWFzc2VydAoJbG9nCglyZXRzdWIKCi8vIGR1bW15KCl2b2lkCiphYmlfcm91dGVfZHVtbXk6CgkvLyBleGVjdXRlIGR1bW15KCl2b2lkCgljYWxsc3ViIGR1bW15CglpbnRjIDAgLy8gMQoJcmV0dXJuCgovLyBkdW1teSgpOiB2b2lkCmR1bW15OgoJcHJvdG8gMCAwCglyZXRzdWIKCi8vIG1hbnlSZXNvdXJjZXMoYWRkcmVzc1s0XSx1aW50NjRbNF0sdWludDY0WzRdLHVpbnQ4WzRdKXZvaWQKKmFiaV9yb3V0ZV9tYW55UmVzb3VyY2VzOgoJLy8gYm94ZXM6IHVpbnQ4WzRdCgl0eG5hIEFwcGxpY2F0aW9uQXJncyA0CglkdXAKCWxlbgoJaW50YyA1IC8vIDQKCT09CgoJLy8gYXJndW1lbnQgMCAoYm94ZXMpIGZvciBtYW55UmVzb3VyY2VzIG11c3QgYmUgYSB1aW50OFs0XQoJYXNzZXJ0CgoJLy8gYXBwczogdWludDY0WzRdCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAzCglkdXAKCWxlbgoJaW50YyAyIC8vIDMyCgk9PQoKCS8vIGFyZ3VtZW50IDEgKGFwcHMpIGZvciBtYW55UmVzb3VyY2VzIG11c3QgYmUgYSB1aW50NjRbNF0KCWFzc2VydAoKCS8vIGFzYTogdWludDY0WzRdCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglkdXAKCWxlbgoJaW50YyAyIC8vIDMyCgk9PQoKCS8vIGFyZ3VtZW50IDIgKGFzYSkgZm9yIG1hbnlSZXNvdXJjZXMgbXVzdCBiZSBhIHVpbnQ2NFs0XQoJYXNzZXJ0CgoJLy8gYWNjb3VudHM6IGFkZHJlc3NbNF0KCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnRjIDYgLy8gMTI4Cgk9PQoKCS8vIGFyZ3VtZW50IDMgKGFjY291bnRzKSBmb3IgbWFueVJlc291cmNlcyBtdXN0IGJlIGEgYWRkcmVzc1s0XQoJYXNzZXJ0CgoJLy8gZXhlY3V0ZSBtYW55UmVzb3VyY2VzKGFkZHJlc3NbNF0sdWludDY0WzRdLHVpbnQ2NFs0XSx1aW50OFs0XSl2b2lkCgljYWxsc3ViIG1hbnlSZXNvdXJjZXMKCWludGMgMCAvLyAxCglyZXR1cm4KCi8vIG1hbnlSZXNvdXJjZXMoYWNjb3VudHM6IFN0YXRpY0FycmF5PEFkZHJlc3MsIDQ+LCBhc2E6IFN0YXRpY0FycmF5PEFzc2V0SUQsIDQ+LCBhcHBzOiBTdGF0aWNBcnJheTxBcHBJRCwgND4sIGJveGVzOiBTdGF0aWNBcnJheTx1aW50OCwgND4pOiB2b2lkCm1hbnlSZXNvdXJjZXM6Cglwcm90byA0IDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZWMgMCAvLyAweAoJZHVwbiAxNwoJZnJhbWVfZGlnIC0xIC8vIGFjY291bnRzOiBTdGF0aWNBcnJheTxBZGRyZXNzLCA0PgoJZHVwCglmcmFtZV9idXJ5IDAgLy8gY29weSBvZiB0aGUgYXJyYXkgd2UgYXJlIGl0ZXJhdGluZyBvdmVyCglleHRyYWN0IDAgMzIKCWZyYW1lX2J1cnkgMSAvLyBhZGRyOiBhZGRyZXNzCglpbnRjIDEgLy8gMAoJZnJhbWVfYnVyeSAyIC8vIHRoZSBvZmZzZXQgd2UgYXJlIGV4dHJhY3RpbmcgdGhlIG5leHQgZWxlbWVudCBmcm9tCgoqZm9yT2ZfMDoKCS8vIHJlc291cmNlLXBhY2tlci5hbGdvLnRzOjE5OQoJLy8gYXNzZXJ0KCFhZGRyLmlzSW5MZWRnZXIpCglmcmFtZV9kaWcgMSAvLyBhZGRyOiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXN3YXAKCXBvcAoJIQoJYXNzZXJ0CglmcmFtZV9kaWcgLTIgLy8gYXNhOiBTdGF0aWNBcnJheTxBc3NldElELCA0PgoJZHVwCglmcmFtZV9idXJ5IDMgLy8gY29weSBvZiB0aGUgYXJyYXkgd2UgYXJlIGl0ZXJhdGluZyBvdmVyCglleHRyYWN0IDAgOAoJYnRvaQoJZnJhbWVfYnVyeSA0IC8vIGFzc2V0OiB1aW50NjQKCWludGMgMSAvLyAwCglmcmFtZV9idXJ5IDUgLy8gdGhlIG9mZnNldCB3ZSBhcmUgZXh0cmFjdGluZyB0aGUgbmV4dCBlbGVtZW50IGZyb20KCipmb3JPZl8xOgoJLy8gcmVzb3VyY2UtcGFja2VyLmFsZ28udHM6MjAyCgkvLyBhc3NlcnQoIWFkZHIuaXNPcHRlZEluVG9Bc3NldChhc3NldCkpCglmcmFtZV9kaWcgMSAvLyBhZGRyOiBhZGRyZXNzCglmcmFtZV9kaWcgNCAvLyBhc3NldDogdWludDY0Cglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJIQoJYXNzZXJ0CgoqZm9yT2ZfMV9jb250aW51ZToKCS8vIGluY3JlbWVudCBvZmZzZXQgYW5kIGxvb3AgaWYgbm90IG91dCBvZiBib3VuZHMKCWZyYW1lX2RpZyA1IC8vIHRoZSBvZmZzZXQgd2UgYXJlIGV4dHJhY3RpbmcgdGhlIG5leHQgZWxlbWVudCBmcm9tCglpbnRjIDMgLy8gOAoJKwoJZHVwCglpbnRjIDIgLy8gIG9mZnNldCBvZiBsYXN0IGVsZW1lbnQKCTwKCWJ6ICpmb3JPZl8xX2VuZAoJZnJhbWVfYnVyeSA1IC8vIHRoZSBvZmZzZXQgd2UgYXJlIGV4dHJhY3RpbmcgdGhlIG5leHQgZWxlbWVudCBmcm9tCglmcmFtZV9kaWcgMyAvLyBjb3B5IG9mIHRoZSBhcnJheSB3ZSBhcmUgaXRlcmF0aW5nIG92ZXIKCWZyYW1lX2RpZyA1IC8vIHRoZSBvZmZzZXQgd2UgYXJlIGV4dHJhY3RpbmcgdGhlIG5leHQgZWxlbWVudCBmcm9tCglpbnRjIDMgLy8gOAoJZXh0cmFjdAoJYnRvaQoJZnJhbWVfYnVyeSA0IC8vIGFzc2V0OiB1aW50NjQKCWIgKmZvck9mXzEKCipmb3JPZl8xX2VuZDoKCWZyYW1lX2RpZyAtMyAvLyBhcHBzOiBTdGF0aWNBcnJheTxBcHBJRCwgND4KCWR1cAoJZnJhbWVfYnVyeSA2IC8vIGNvcHkgb2YgdGhlIGFycmF5IHdlIGFyZSBpdGVyYXRpbmcgb3ZlcgoJZXh0cmFjdCAwIDgKCWJ0b2kKCWZyYW1lX2J1cnkgNyAvLyBhcHA6IHVpbnQ2NAoJaW50YyAxIC8vIDAKCWZyYW1lX2J1cnkgOCAvLyB0aGUgb2Zmc2V0IHdlIGFyZSBleHRyYWN0aW5nIHRoZSBuZXh0IGVsZW1lbnQgZnJvbQoKKmZvck9mXzI6CgkvLyByZXNvdXJjZS1wYWNrZXIuYWxnby50czoyMDYKCS8vIGFzc2VydCghYWRkci5pc09wdGVkSW5Ub0FwcChhcHApKQoJZnJhbWVfZGlnIDEgLy8gYWRkcjogYWRkcmVzcwoJZnJhbWVfZGlnIDcgLy8gYXBwOiB1aW50NjQKCWFwcF9vcHRlZF9pbgoJIQoJYXNzZXJ0CgoqZm9yT2ZfMl9jb250aW51ZToKCS8vIGluY3JlbWVudCBvZmZzZXQgYW5kIGxvb3AgaWYgbm90IG91dCBvZiBib3VuZHMKCWZyYW1lX2RpZyA4IC8vIHRoZSBvZmZzZXQgd2UgYXJlIGV4dHJhY3RpbmcgdGhlIG5leHQgZWxlbWVudCBmcm9tCglpbnRjIDMgLy8gOAoJKwoJZHVwCglpbnRjIDIgLy8gIG9mZnNldCBvZiBsYXN0IGVsZW1lbnQKCTwKCWJ6ICpmb3JPZl8yX2VuZAoJZnJhbWVfYnVyeSA4IC8vIHRoZSBvZmZzZXQgd2UgYXJlIGV4dHJhY3RpbmcgdGhlIG5leHQgZWxlbWVudCBmcm9tCglmcmFtZV9kaWcgNiAvLyBjb3B5IG9mIHRoZSBhcnJheSB3ZSBhcmUgaXRlcmF0aW5nIG92ZXIKCWZyYW1lX2RpZyA4IC8vIHRoZSBvZmZzZXQgd2UgYXJlIGV4dHJhY3RpbmcgdGhlIG5leHQgZWxlbWVudCBmcm9tCglpbnRjIDMgLy8gOAoJZXh0cmFjdAoJYnRvaQoJZnJhbWVfYnVyeSA3IC8vIGFwcDogdWludDY0CgliICpmb3JPZl8yCgoqZm9yT2ZfMl9lbmQ6CgoqZm9yT2ZfMF9jb250aW51ZToKCS8vIGluY3JlbWVudCBvZmZzZXQgYW5kIGxvb3AgaWYgbm90IG91dCBvZiBib3VuZHMKCWZyYW1lX2RpZyAyIC8vIHRoZSBvZmZzZXQgd2UgYXJlIGV4dHJhY3RpbmcgdGhlIG5leHQgZWxlbWVudCBmcm9tCglpbnRjIDIgLy8gMzIKCSsKCWR1cAoJaW50YyA2IC8vICBvZmZzZXQgb2YgbGFzdCBlbGVtZW50Cgk8CglieiAqZm9yT2ZfMF9lbmQKCWZyYW1lX2J1cnkgMiAvLyB0aGUgb2Zmc2V0IHdlIGFyZSBleHRyYWN0aW5nIHRoZSBuZXh0IGVsZW1lbnQgZnJvbQoJZnJhbWVfZGlnIDAgLy8gY29weSBvZiB0aGUgYXJyYXkgd2UgYXJlIGl0ZXJhdGluZyBvdmVyCglmcmFtZV9kaWcgMiAvLyB0aGUgb2Zmc2V0IHdlIGFyZSBleHRyYWN0aW5nIHRoZSBuZXh0IGVsZW1lbnQgZnJvbQoJaW50YyAyIC8vIDMyCglleHRyYWN0CglmcmFtZV9idXJ5IDEgLy8gYWRkcjogYWRkcmVzcwoJYiAqZm9yT2ZfMAoKKmZvck9mXzBfZW5kOgoJZnJhbWVfZGlnIC0yIC8vIGFzYTogU3RhdGljQXJyYXk8QXNzZXRJRCwgND4KCWR1cAoJZnJhbWVfYnVyeSA5IC8vIGNvcHkgb2YgdGhlIGFycmF5IHdlIGFyZSBpdGVyYXRpbmcgb3ZlcgoJZXh0cmFjdCAwIDgKCWJ0b2kKCWZyYW1lX2J1cnkgMTAgLy8gYXNzZXQ6IHVpbnQ2NAoJaW50YyAxIC8vIDAKCWZyYW1lX2J1cnkgMTEgLy8gdGhlIG9mZnNldCB3ZSBhcmUgZXh0cmFjdGluZyB0aGUgbmV4dCBlbGVtZW50IGZyb20KCipmb3JPZl8zOgoJLy8gcmVzb3VyY2UtcGFja2VyLmFsZ28udHM6MjExCgkvLyBhc3NlcnQoYXNzZXQudG90YWwpCglmcmFtZV9kaWcgMTAgLy8gYXNzZXQ6IHVpbnQ2NAoJYXNzZXRfcGFyYW1zX2dldCBBc3NldFRvdGFsCglwb3AKCWFzc2VydAoKKmZvck9mXzNfY29udGludWU6CgkvLyBpbmNyZW1lbnQgb2Zmc2V0IGFuZCBsb29wIGlmIG5vdCBvdXQgb2YgYm91bmRzCglmcmFtZV9kaWcgMTEgLy8gdGhlIG9mZnNldCB3ZSBhcmUgZXh0cmFjdGluZyB0aGUgbmV4dCBlbGVtZW50IGZyb20KCWludGMgMyAvLyA4CgkrCglkdXAKCWludGMgMiAvLyAgb2Zmc2V0IG9mIGxhc3QgZWxlbWVudAoJPAoJYnogKmZvck9mXzNfZW5kCglmcmFtZV9idXJ5IDExIC8vIHRoZSBvZmZzZXQgd2UgYXJlIGV4dHJhY3RpbmcgdGhlIG5leHQgZWxlbWVudCBmcm9tCglmcmFtZV9kaWcgOSAvLyBjb3B5IG9mIHRoZSBhcnJheSB3ZSBhcmUgaXRlcmF0aW5nIG92ZXIKCWZyYW1lX2RpZyAxMSAvLyB0aGUgb2Zmc2V0IHdlIGFyZSBleHRyYWN0aW5nIHRoZSBuZXh0IGVsZW1lbnQgZnJvbQoJaW50YyAzIC8vIDgKCWV4dHJhY3QKCWJ0b2kKCWZyYW1lX2J1cnkgMTAgLy8gYXNzZXQ6IHVpbnQ2NAoJYiAqZm9yT2ZfMwoKKmZvck9mXzNfZW5kOgoJZnJhbWVfZGlnIC0zIC8vIGFwcHM6IFN0YXRpY0FycmF5PEFwcElELCA0PgoJZHVwCglmcmFtZV9idXJ5IDEyIC8vIGNvcHkgb2YgdGhlIGFycmF5IHdlIGFyZSBpdGVyYXRpbmcgb3ZlcgoJZXh0cmFjdCAwIDgKCWJ0b2kKCWZyYW1lX2J1cnkgMTMgLy8gYXBwOiB1aW50NjQKCWludGMgMSAvLyAwCglmcmFtZV9idXJ5IDE0IC8vIHRoZSBvZmZzZXQgd2UgYXJlIGV4dHJhY3RpbmcgdGhlIG5leHQgZWxlbWVudCBmcm9tCgoqZm9yT2ZfNDoKCS8vIHJlc291cmNlLXBhY2tlci5hbGdvLnRzOjIxNQoJLy8gbG9nKGFwcC5jcmVhdG9yKQoJZnJhbWVfZGlnIDEzIC8vIGFwcDogdWludDY0CglhcHBfcGFyYW1zX2dldCBBcHBDcmVhdG9yCglwb3AKCWxvZwoKKmZvck9mXzRfY29udGludWU6CgkvLyBpbmNyZW1lbnQgb2Zmc2V0IGFuZCBsb29wIGlmIG5vdCBvdXQgb2YgYm91bmRzCglmcmFtZV9kaWcgMTQgLy8gdGhlIG9mZnNldCB3ZSBhcmUgZXh0cmFjdGluZyB0aGUgbmV4dCBlbGVtZW50IGZyb20KCWludGMgMyAvLyA4CgkrCglkdXAKCWludGMgMiAvLyAgb2Zmc2V0IG9mIGxhc3QgZWxlbWVudAoJPAoJYnogKmZvck9mXzRfZW5kCglmcmFtZV9idXJ5IDE0IC8vIHRoZSBvZmZzZXQgd2UgYXJlIGV4dHJhY3RpbmcgdGhlIG5leHQgZWxlbWVudCBmcm9tCglmcmFtZV9kaWcgMTIgLy8gY29weSBvZiB0aGUgYXJyYXkgd2UgYXJlIGl0ZXJhdGluZyBvdmVyCglmcmFtZV9kaWcgMTQgLy8gdGhlIG9mZnNldCB3ZSBhcmUgZXh0cmFjdGluZyB0aGUgbmV4dCBlbGVtZW50IGZyb20KCWludGMgMyAvLyA4CglleHRyYWN0CglidG9pCglmcmFtZV9idXJ5IDEzIC8vIGFwcDogdWludDY0CgliICpmb3JPZl80CgoqZm9yT2ZfNF9lbmQ6CglmcmFtZV9kaWcgLTQgLy8gYm94ZXM6IFN0YXRpY0FycmF5PHVpbnQ4LCA0PgoJZHVwCglmcmFtZV9idXJ5IDE1IC8vIGNvcHkgb2YgdGhlIGFycmF5IHdlIGFyZSBpdGVyYXRpbmcgb3ZlcgoJZXh0cmFjdCAwIDEKCWJ0b2kKCWZyYW1lX2J1cnkgMTYgLy8gYm94S2V5OiB1aW50OAoJaW50YyAxIC8vIDAKCWZyYW1lX2J1cnkgMTcgLy8gdGhlIG9mZnNldCB3ZSBhcmUgZXh0cmFjdGluZyB0aGUgbmV4dCBlbGVtZW50IGZyb20KCipmb3JPZl81OgoJLy8gcmVzb3VyY2UtcGFja2VyLmFsZ28udHM6MjE5CgkvLyB0aGlzLmJ5dGVCb3hlcyhib3hLZXkpLnZhbHVlID0gJ2ZvbycKCXB1c2hieXRlcyAweDYyIC8vICJiIgoJZnJhbWVfZGlnIDE2IC8vIGJveEtleTogdWludDgKCWl0b2IKCWV4dHJhY3QgNyAxCgljb25jYXQKCWR1cAoJYm94X2RlbAoJcG9wCglwdXNoYnl0ZXMgMHg2NjZmNmYgLy8gImZvbyIKCWJveF9wdXQKCipmb3JPZl81X2NvbnRpbnVlOgoJLy8gaW5jcmVtZW50IG9mZnNldCBhbmQgbG9vcCBpZiBub3Qgb3V0IG9mIGJvdW5kcwoJZnJhbWVfZGlnIDE3IC8vIHRoZSBvZmZzZXQgd2UgYXJlIGV4dHJhY3RpbmcgdGhlIG5leHQgZWxlbWVudCBmcm9tCglpbnRjIDAgLy8gMQoJKwoJZHVwCglpbnRjIDUgLy8gIG9mZnNldCBvZiBsYXN0IGVsZW1lbnQKCTwKCWJ6ICpmb3JPZl81X2VuZAoJZnJhbWVfYnVyeSAxNyAvLyB0aGUgb2Zmc2V0IHdlIGFyZSBleHRyYWN0aW5nIHRoZSBuZXh0IGVsZW1lbnQgZnJvbQoJZnJhbWVfZGlnIDE1IC8vIGNvcHkgb2YgdGhlIGFycmF5IHdlIGFyZSBpdGVyYXRpbmcgb3ZlcgoJZnJhbWVfZGlnIDE3IC8vIHRoZSBvZmZzZXQgd2UgYXJlIGV4dHJhY3RpbmcgdGhlIG5leHQgZWxlbWVudCBmcm9tCglpbnRjIDAgLy8gMQoJZXh0cmFjdAoJYnRvaQoJZnJhbWVfYnVyeSAxNiAvLyBib3hLZXk6IHVpbnQ4CgliICpmb3JPZl81CgoqZm9yT2ZfNV9lbmQ6CglyZXRzdWIKCiphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb246CglpbnRjIDAgLy8gMQoJcmV0dXJuCgoqY3JlYXRlX05vT3A6CglieXRlYyAzIC8vICBtZXRob2QgImNyZWF0ZUFwcGxpY2F0aW9uKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbgoKCS8vIHRoaXMgY29udHJhY3QgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBnaXZlbiBBQkkgbWV0aG9kIGZvciBjcmVhdGUgTm9PcAoJZXJyCgoqY2FsbF9Ob09wOgoJcHVzaGJ5dGVzIDB4YmVjNzZkODcgLy8gbWV0aG9kICJib290c3RyYXAoKXZvaWQiCglwdXNoYnl0ZXMgMHgyNmRiOWRiNyAvLyBtZXRob2QgImFkZHJlc3NCYWxhbmNlKGFkZHJlc3Mpdm9pZCIKCXB1c2hieXRlcyAweDMwOWVlMDczIC8vIG1ldGhvZCAic21hbGxCb3goKXZvaWQiCglwdXNoYnl0ZXMgMHhiNTY2OGUxNyAvLyBtZXRob2QgIm1lZGl1bUJveCgpdm9pZCIKCXB1c2hieXRlcyAweGE5ZDgzNWUwIC8vIG1ldGhvZCAiZXh0ZXJuYWxBcHBDYWxsKCl2b2lkIgoJcHVzaGJ5dGVzIDB4MjExNjI0YTAgLy8gbWV0aG9kICJhc3NldFRvdGFsKCl2b2lkIgoJcHVzaGJ5dGVzIDB4YWEzOGFlOTEgLy8gbWV0aG9kICJoYXNBc3NldChhZGRyZXNzKXZvaWQiCglwdXNoYnl0ZXMgMHgyNGQxZDAxMyAvLyBtZXRob2QgImV4dGVybmFsTG9jYWwoYWRkcmVzcyl2b2lkIgoJYnl0ZWMgNCAvLyAgbWV0aG9kICJkdW1teSgpdm9pZCIKCXB1c2hieXRlcyAweGIzYzU5ZGExIC8vIG1ldGhvZCAibWFueVJlc291cmNlcyhhZGRyZXNzWzRdLHVpbnQ2NFs0XSx1aW50NjRbNF0sdWludDhbNF0pdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfYm9vdHN0cmFwICphYmlfcm91dGVfYWRkcmVzc0JhbGFuY2UgKmFiaV9yb3V0ZV9zbWFsbEJveCAqYWJpX3JvdXRlX21lZGl1bUJveCAqYWJpX3JvdXRlX2V4dGVybmFsQXBwQ2FsbCAqYWJpX3JvdXRlX2Fzc2V0VG90YWwgKmFiaV9yb3V0ZV9oYXNBc3NldCAqYWJpX3JvdXRlX2V4dGVybmFsTG9jYWwgKmFiaV9yb3V0ZV9kdW1teSAqYWJpX3JvdXRlX21hbnlSZXNvdXJjZXMKCgkvLyB0aGlzIGNvbnRyYWN0IGRvZXMgbm90IGltcGxlbWVudCB0aGUgZ2l2ZW4gQUJJIG1ldGhvZCBmb3IgY2FsbCBOb09wCgllcnI=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDk=" }, "contract": { @@ -161,6 +171,37 @@ "type": "void" } }, + { + "name": "dummy", + "args": [], + "returns": { + "type": "void" + } + }, + { + "name": "manyResources", + "args": [ + { + "name": "accounts", + "type": "address[4]" + }, + { + "name": "asa", + "type": "uint64[4]" + }, + { + "name": "apps", + "type": "uint64[4]" + }, + { + "name": "boxes", + "type": "uint8[4]" + } + ], + "returns": { + "type": "void" + } + }, { "name": "createApplication", "args": [], diff --git a/tests/example-contracts/resource-packer/resource-packer.algo.ts b/tests/example-contracts/resource-packer/resource-packer.algo.ts index 847c79f8..2d77b6e8 100644 --- a/tests/example-contracts/resource-packer/resource-packer.algo.ts +++ b/tests/example-contracts/resource-packer/resource-packer.algo.ts @@ -136,6 +136,8 @@ class ResourcePackerv9 extends Contract { mediumBoxKey = BoxKey({ key: 'm' }) + byteBoxes = BoxMap({ prefix: 'b' }) + bootstrap(): void { sendMethodCall<[], void>({ name: 'createApplication', @@ -184,4 +186,37 @@ class ResourcePackerv9 extends Contract { externalLocal(addr: Address): void { log(this.externalAppID.value.localState(addr, 'localKey') as bytes) } + + dummy(): void {} + + manyResources( + accounts: StaticArray, + asa: StaticArray, + apps: StaticArray, + boxes: StaticArray, + ): void { + for (const addr of accounts) { + assert(!addr.isInLedger) + + for (const asset of asa) { + assert(!addr.isOptedInToAsset(asset)) + } + + for (const app of apps) { + assert(!addr.isOptedInToApp(app)) + } + } + + for (const asset of asa) { + assert(asset.total) + } + + for (const app of apps) { + log(app.creator) + } + + for (const boxKey of boxes) { + this.byteBoxes(boxKey).value = 'foo' + } + } }